今天在寫一個 popwindow祈匙,給它重新設置高度的時候吐限,竟然報錯:
java.lang.NullPointerException: Layout parameters cannot be null at android.view.View.setLayoutParams(View.java:11504)
關鍵是鲜侥,在 android 7.0 系統上運行正常,一到 5.5 上運行就崩潰诸典,于是定位代碼描函,首先看是不是view加載失敗了,定位代碼行
mLayoutView = LayoutInflater.from(context).inflate(mLayoutId, null);
打印出的 mLayoutView 是有值的狐粱。
接著看它的調用的地方:
private void setViewSize(final View view){
view.post(new Runnable(){
public void run() {//這里獲取寬高
int maxHeight=ScreenUtil.getHeight(mContext)/4;
int height=view.getHeight();
ViewGroup.LayoutParams params= view.getLayoutParams();
if(height>maxHeight){
params.height=maxHeight;
}
view.setLayoutParams(params);
}
});
}
運行后舀寓,顯示 view.setLayoutParams(params); 這行報錯,報的錯就是
Layout parameters cannot be null at android.view.View.setLayoutParams(View.java:11504)
很納悶啊肌蜻,于是就把 setViewSize()方法中的
ViewGroup.LayoutParams params= view.getLayoutParams();
改成
ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(ScreenUtil.getWidth(mContext)/3, ViewGroup.LayoutParams.WRAP_CONTENT);
即 setViewSize()方法成下邊這樣的:
private void setViewSize(final View view){
view.post(new Runnable(){
public void run() {//這里獲取寬高
int maxHeight=ScreenUtil.getHeight(mContext)/4;
int height=view.getHeight();
ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(ScreenUtil.getWidth(mContext)/3, ViewGroup.LayoutParams.WRAP_CONTENT);
if(height>maxHeight){
params.height=maxHeight;
}
view.setLayoutParams(params);
}
});
}
然后互墓,在 7.0 手機上運行,完美蒋搜!接著在5.0手機上運行篡撵,完美判莉!你知道我當時的心情么,簡直就是一萬只草泥馬被太陽曬死的場面育谬,我勒個去啊券盅。
唉,好了膛檀,不管怎樣锰镀,問題算是解決了,希望遇到相同問題的哥們別踩一樣的坑咖刃,謝謝誒泳炉。