2011-01-09 1 views
235

私はプログラム的に作成しています相対的なレイアウトを持っている:相対レイアウトで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"属性を設定する方法を知りたいですか?

答えて

561

LayoutParamsには、View.getLayoutParamsを使用してコードからアクセスできます。あなたは何を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 
+1

のIDを持っていないとブロックする必要がありますか? params.addRule(RelativeLayout.LEFT_OF、R.id.id_to_be_left_of); TextView tvUserName =新しいTextView(動作); –

+13

IDの追加はどうですか? – user2161301

+1

'button'が' RecycleView'にある場合はどうなりますか?同じウィジェットまたは同じウィジェットに同じルールまたは反対のルールを追加することは問題ではありませんか? –

10
  1. あなたが ボタンの作成およびIDする必要があります、私は方法がaddRule()だと思う 、 btn1.setId(1);
  2. あなたのレイアウトにパラメータを追加 へのparams変数を使用することができます:あなたはrefferenceする必要がありますこの LayoutParamsオブジェクトの をアンドロイドのJavaドキュメントからチェックしてください。
+0

私は非常にコードのどの部分をいただければ幸いです。私はボタン内の任意のメソッドを見つけることはありません。 –

+0

set idに@IdResという注釈が付けられているので、実際のリソースIDが単なる数値ではなく、idを設定することは役に立ちません。 –

+0

それは新しいです、過去には、例えば、リソース番号をレイアウトから取って、それが衝突しないリソースIDのベースとして使用することができます.iはGoogleが/ – codeScriber

関連する問題