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

负责的一个新手引导的需求,友盟上报 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 时,要注意可能出现空指针的问题。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章