在尝试获取RelativeLayout.LayoutParams时继续收到错误

时间:2016-05-18 18:14:55

标签: android relativelayout layoutparams

我有这个观点

<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但仍然遇到同样的错误。

1 个答案:

答案 0 :(得分:1)

由于您只使用lpp.height,因此直接使用android.view.ViewGroup.LayoutParams即可。不需要铸造。

就像你说的那样,LayoutParams取决于父视图。但ScrollView没有定义自己的子类。这就是你找到FrameLayout.LayoutParams的原因。

对于第二个投射问题,您可能已将LayoutParams设置为RelativeLayout.LayoutParams parent.setLayoutParams(lp)