您的位置:首页 > 移动开发 > Android开发

Android 4.3(API 18)及以下调用 RelativeLayout.mesure() 时出现 NullPointerException 异常

2017-11-15 16:36 585 查看
负责的一个新手引导的需求,友盟上报 Android 4.3(API 18) 的机型(公司APP 最低支持的安卓版本即为 4.3)中会出现 NullPointerException 的 bug。

百度后知道了原因:http://blog.csdn.net/chengxu_hou/article/details/74940938。原来,只要是在 4.3 及以下的系统中调用 RelativeLayout.mesure() 方法,就会出现空指针的问题,是因为源码没有做判空处理;4.4 及以上由于修复了系统源码,就不会出现该问题了。

再看看我的bug,我的 Dialog 的 xml 根布局的确是 RelativeLayout,并且在 Dialog 的构造方法中调用了 mesure() 方法:



解决方法:

(第一种方法最简单,推荐之)

1、使用 inflate 初始化布局时,尽量设置父视图(parent

contentView = LayoutInflater.from(context).inflate(layoutResId, parent, false);


2、显式设置 LayoutParams

contentView = LayoutInflater.from(context).inflate(layoutResId, null);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
contentView.setLayoutParams(params);


3、老老实实修改布局,不使用 RelativeLayout ~

总结

在使用 RelativeLayout 并且需要手动 measure 时,要注意可能出现空指针的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐