我有这个观点
<ScrollView ...>
<RelativeLayout ...>
我定义了RelativeLayout,我想在Java中操作它,就像这个
ViewGroup parent = (ViewGroup) rootView
.findViewById(R.id.rltv_layout);
我想改变亲戚的身高,所以我想我会用
RelativeLayout.LayoutParams lpp = (RelativeLayout.LayoutParams) parent.getLayoutParams();
lpp.height = lpp.height + someHeights;
parent.setLayoutParams(lp);
然后发生错误,LogCat说
05-18 14:01:49.829: E/AndroidRuntime(12856): java.lang.ClassCastException:
android.widget.FrameLayout$LayoutParams cannot be cast
to android.widget.RelativeLayout$LayoutParams
所以我把它改成了
FrameLayout.LayoutParams lpp = (FrameLayout.LayoutParams) parent.getLayoutParams();
然后发生错误,LogCat说
05-18 14:06:16.297: E/AndroidRuntime(13183): java.lang.ClassCastException:
android.widget.RelativeLayout$LayoutParams cannot be cast
to android.widget.FrameLayout$LayoutParams
那么它想要的是什么?
此外,AFAIK,LayoutParams类型取决于其父类型,而不是视图本身。有一次,我尝试ScrollView.LayoutParams
但仍然遇到同样的错误。
答案 0 :(得分:1)
由于您只使用lpp.height
,因此直接使用android.view.ViewGroup.LayoutParams
即可。不需要铸造。
就像你说的那样,LayoutParams取决于父视图。但ScrollView
没有定义自己的子类。这就是你找到FrameLayout.LayoutParams
的原因。
对于第二个投射问题,您可能已将LayoutParams
设置为RelativeLayout.LayoutParams
parent.setLayoutParams(lp)
。