今天在寫一個 popwindow,給它重新設(shè)置高度的時候,竟然報錯:
java.lang.NullPointerException: Layout parameters cannot be null at android.view.View.setLayoutParams(View.java:11504)
關(guān)鍵是,在 android 7.0 系統(tǒng)上運(yùn)行正常,一到 5.5 上運(yùn)行就崩潰,于是定位代碼,首先看是不是view加載失敗了,定位代碼行
mLayoutView = LayoutInflater.from(context).inflate(mLayoutId, null);
打印出的 mLayoutView 是有值的。
接著看它的調(diào)用的地方:
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);
}
});
}
運(yùn)行后,顯示 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 手機(jī)上運(yùn)行,完美!接著在5.0手機(jī)上運(yùn)行,完美!你知道我當(dāng)時的心情么,簡直就是一萬只草泥馬被太陽曬死的場面,我勒個去啊。
唉,好了,不管怎樣,問題算是解決了,希望遇到相同問題的哥們別踩一樣的坑,謝謝誒。