web-dev-qa-db-ja.com

相対レイアウトでButtonのlayout_align_parent_right属性をプログラムで設定する方法

プログラムで作成した相対レイアウトがあります。

 RelativeLayout layout = new RelativeLayout( this );
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);

この相対的なレイアウトに追加したいボタンが2つあります。しかし、問題は両方のボタンがRelatiiveLayoutの左側に重なって表示されていることです。

buttonContainer.addView(btn1);
buttonContainer.addView(btn2);

XmlのようにボタンのAndroid:layout_alignParentRight="true "またはAndroid:layout_toLeftOf="@id/btn"属性をプログラムで設定する方法を知りたいですか。

266
Fahad Ali

View.getLayoutParamsを使用してコードから任意のLayoutParamsにアクセスできます。あなたは、あなたがアクセスしているLayoutParamsをよく知っている必要があります。これは通常、含まれているViewGroupLayoutParamsの内側の子を持っているかどうかをチェックすることで実現できます。あなたの場合はRelativeLayout.LayoutParamsです。 RelativeLayout.LayoutParams#addRule(int verb)RelativeLayout.LayoutParams#addRule(int verb, int anchor) を使うことになるでしょう。

あなたはコードを介してそれに到達することができます:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);

button.setLayoutParams(params); //causes layout update
612
Rich Schuler
  1. 参照する必要があるボタンを作成してIDを指定する必要があります。btn1.setId(1);
  2. あなたはあなたのレイアウトにパラメータを追加するためにparams変数を使用することができます、私はメソッドがaddRule()であると思う、このLayoutParamsname__オブジェクトのためのAndroid Javaドキュメントをチェックしてください。
12
codeScriber

値がtrueまたはfalseのRelativeLayout属性を追加するには、falseの場合は0を、trueの場合はRelativeLayout.TRUEを使用します。

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams()
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE)

属性がすでに追加されているかどうかは関係ありません。有効化/無効化にはaddRule(verb, subject)を使用します。ただし、ポストAPI 17では、removeRule(verb)のショートカットにすぎないaddRule(verb, 0)を使用できます。

4
shoe