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 時,要注意可能出現空指針的問題。

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