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)
2、显式设置 LayoutParams
3、老老实实修改布局,不使用 RelativeLayout ~
总结
在使用 RelativeLayout 并且需要手动 measure 时,要注意可能出现空指针的问题。
百度后知道了原因: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 时,要注意可能出现空指针的问题。
相关文章推荐
- Android兼容性问题 -- RelativeLayout.mesure()出现NullPointerException异常
- Android RelativeLayout.mesure()时出现NullPointerException异常
- android开发中遇到的问题解决之RelativeLayout执行measure(w,h)方法时,出现NullPointerException的异常情况
- Android 4.3以下, 调用measure(0, 0)抛java.lang.NullPointerException异常
- RelativeLayout执行measure(w,h)方法时,出现NullPointerException的异常情况
- Android 关于RelativeLayout.onMeasure出现的NullPointerException错误
- RelativeLayout执行measure(w,h)方法时,出现NullPointerException的异常情况
- 调用 RelativeLayout measure()报 java.lang.NullPointerException
- Android中,在onAnimationEnd方法中调用 viewgroup.removeview,报 nullpointerexception异常的解决方法
- Android: NullPointerException when using RelativeLayout with measure()
- android中调用findViewById时出现:java.lang.NullPointerException
- Android中SharedPreferences出现NullPointerException的解决办法【转】
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- 解决Android Studio 3.0.1 下使用ButterKnife 8.8.1版本出现 nullpointerexception 等异常问题
- Android异常 NullPointerException: Attempt to invoke virtual method int java.lang.Integer.intValue()
- context.getSystemService(context.LAYOUT_INFLATER_SERVICE)调用时报NullPointerException
- Android2.3 版本PopupWindow出现NullPointerException错误
- JSP页面中出现的一个异常:org.apache.jasper.JasperException: java.lang.NullPointerException
- android 4.4以下loadIocn nullpointerException问题
- eclipse导出android项目javadoc时报NullPointerException异常