布局无法预览往往严重影响开发效率。而自定义控件往往会导致布局文件无法预览,如果问题代码直接写到自定义控件中Android Studio往往可以识别出来,但是如果发现是调用链比较深甚至已经调用到其他文件的情况,目前Android Studio的布局预览不会报任何错误,直接无法预览布局,这时候别慌,需要开发者手动排查,具体步骤如下:
- 打开无法预览的布局文件
- 尝试删除掉控件A,如果删除控件A后成功预览,则去控件A定位问题
- 将控件A的构造方法及其调用的方法中的可疑代码(预留过程中由于没有初始化会造成空指针或者类型转换异常的如context转换成Activity)删除,rebuild项目,再次检查是否能够预览
- 将可疑代码用isEditMode()隔离
平时封装自定义控件的时候除必要情况下,建议不要写过于复杂的代码,如果自定义控件的构造方法及其调用的方法中存在下面这些代码最好用isEditMode()隔离开:
- 依赖Application初始化后才能调用的代码,否则会因为空指针问题导致布局无法预览
- View如果在Activity中使用,通过getContext()后转换成Activity,可能会引起类型转换异常或者空指针导致布局无法预览
- View中存在Native方法调用、反射调用的,可能也会导致布局无法预览
- 等等……