RelativeLayout 正在返回 LinearLayout LayoutParams

RelativeLayout is returning LinearLayout LayoutParams

这是我的布局 xml 中的一个片段,它定义了我的 RelativeLayout。

<RelativeLayout
    android:id="@+id/npvirrButtons"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    >
    <Button
        android:id="@+id/buttonNPVLabel"
        android:layout_marginLeft="20dp"
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        />

    <Button
        android:id="@+id/buttonIRR_NFV"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        />

</RelativeLayout>

这是我保存对它的引用的地方。

this.npvirrButtons = (RelativeLayout)this.findViewById(R.id.npvirrButtons);

然后当我尝试将高度从 0dp 更改为 wrap_content 时,我像这样获取布局参数:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)this.npvirrButtons.getLayoutParams();

但是我抛出异常:

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
    at com.mydomain.myapp.MyActivity.calculateIRR(MyActivity.java:564)

为什么我的 RelativeLayout 返回一个 LinearLayout 参数对象?

getLayoutParams() return根据其 parent 设置视图的当前 LayoutParameters。所以,buttonIRR_NFV 将 return RelativeLayout.LayoutParameter.

这样想:getLayoutParams() 是您调用的一种方法,用于更改当前视图在其容器中的位置。如果您想修改其中一个 children 的布局方式,则必须改为获取其 LayoutParameters。