尝试获取 RelativeLayout.LayoutParams 时不断出错

Keep on getting error when trying to get 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

那么它想要的是什么?

此外,据我所知,LayoutParams 类型取决于其父级的类型,而不是视图本身。有一次我尝试了 ScrollView.LayoutParams,但仍然遇到同样的错误。

由于您只使用 lpp.height,因此直接使用 android.view.ViewGroup.LayoutParams 就足够了。无需铸造。

如您所说,LayoutParams 取决于父视图。但是 ScrollView 没有定义自己的子类。这就是你找到 FrameLayout.LayoutParams.

的原因

对于第二个转换问题,您可能已将 LayoutParams 设置为 RelativeLayout.LayoutParamsparent.setLayoutParams(lp)