ListView,用的是指定义的布局,这个ListView的headerView也是自定义布局,运行报错:
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
如果你要将一个view添加到另一个布局中,你必须设定该View的布局参数为其父类所使用的布局参数类型。即要在代码中动态改变某组件的高度,其布局参数类型应该是其父类所使用的布局参数类型。
参考我的代码,因为ListView的 headerView 的 LayoutParams 参数没有改为和ListView一致;
改为
ListView.LayoutParams LP=newListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
后正常显示。
//动态获取 该视图的宽高 并回写 head高度
ImageView defalt = (ImageView) mHead.findViewById(R.id.defalt_head);
ViewTreeObserver defaltObs = defalt.getViewTreeObserver();
defaltObs.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint("NewApi") @Override public void onGlobalLayout() { // TODO Auto-generated method stub defalt.getViewTreeObserver().removeOnGlobalLayoutListener(this);; mHead.setLayoutParams(new ListView.LayoutParams(defalt.getWidth(),defalt.getHeight())); } });