I have a relativeLayout like below:
m_relativeLayout = (RelativeLayout)findViewById(R.id.parent);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
Button button2 = new Button(this);
button2.setText("I am button 2");
addView(View child, int index, LayoutParams params)
I think If i put an control A in the relativelayout, then i add control B and declare it's on the left of the control A, the result should be the control B will push the control A to its right, right?
Your assumption is incorrect, the control A will not be pushed to the right unless you specified this with a
RelativeLayout places its children one one top of each other starting at the top-left corner of the screen if you don't specify placement rules for them. When you add the
View A to the
RelativeLayout without any rules(like
layout_alignParentRight) it will be placed starting from the top-left corner of the screen. Then, when you add the
View B, the rule
to_leftOf will apply to this
View position but this rule doesn't mean anything for the
View A who will maintain its position on the screen. This will make
View B to be place to the left of
View A but outside of the screen as
View A bounds start from the left border of the screen.
Button will be placed to the left of the
ListView when you use
layout_alignParentRight="true" because there is now space to actually see the
Button(it's not outside anymore).
addView(View child, int index, LayoutParams params) works in a
LinearLayout because the
LinearLayout arranges its children in a row or column(depending on orientation) so when you add a
View at a specific position, it will push the other
Views after it to the right or below(depending on orientation)(there is no relative positioning of the views in a
LinearLayout, the only rule is that the children come one after the other).
Starting with the
ListView without any rules set on it, here is an example on how to make the
Button to appear on the left of the
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); Button button2 = new Button(this); button2.setText("I am button 2"); button2.setId(1000); m_relativeLayout.addView(button2, layoutParams); RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) m_listView .getLayoutParams(); rlp.addRule(RelativeLayout.RIGHT_OF, button2.getId());
The Button will be added as normal to the screen and it will appear starting from the top-left corner of the screen. Without the two lines from the code above the
ListView will overlap as this is the normal behavior of
RelativeLayout for children without any rules on them. We then explicitly modify the position of the
ListView to move it to the right(with the last two line from the code above).