I have a linear layout that is contained inside a relative layout. It is set in the XML file to be to the right of another linear layout (this works fine). In some cases I want to change the relative position of the layout during the onCreate of the activity so I need to modify the "to the right of" param to relate to another layout. I tryed this:
RelativeLayout.LayoutParams layoutParams;
layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
.getLayoutParams();
layoutParams.addRule(RelativeLayout.RIGHT_OF,
R.id.new_ref_LinearLayout);
But it does not work :o(
Any clues ?
You can't remove a rule because all rules are always stored in a fixed-size java array. But you can set a rule to 0
. For example
layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout);
EDIT (thanks to Roger Rapid):
As of API level 17, the class RelativeLayout.LayoutParams
has the following method:
public void removeRule(int verb)
So you can remove a rule using the following line of code:
layoutParams.removeRule(RelativeLayout.RIGHT_OF);
And you will get exactly the same result as when 'adding' a zero-rule as:
layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
I think you need to call:
relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);
after changing the LayoutParams.
In reply to the edit, you can create new LayoutParameters using:
LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
and then add your new rules. Then, update the layout parameters using the previously mentioned updateViewLayout() method.
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