Here is a snippet from my layout xml that defines my 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>
Here is where I save the reference to it.
this.npvirrButtons = (RelativeLayout)this.findViewById(R.id.npvirrButtons);
Then later when I try to change the height from 0dp
to wrap_content
, I grab the layout params like this:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)this.npvirrButtons.getLayoutParams();
But I get an exception thrown:
java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
at com.mydomain.myapp.MyActivity.calculateIRR(MyActivity.java:564)
Why is my RelativeLayout returning a LinearLayout params object?
getLayoutParams()
returns the current LayoutParameters of the view according to its parent. So, buttonIRR_NFV
will return RelativeLayout.LayoutParameter
.
Think about it this way: getLayoutParams()
is a method you call to alter the current view's position on its container. If you want to modify the way you layout one of your children, you have to get its LayoutParameters instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With