今天在写一个 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手机上运行,完美!你知道我当时的心情么,简直就是一万只草泥马被太阳晒死的场面,我勒个去啊。
唉,好了,不管怎样,问题算是解决了,希望遇到相同问题的哥们别踩一样的坑,谢谢诶。