web-dev-qa-db-ja.com

プログラムでアイテムを相対レイアウトに追加する

私はこの質問に対する答えをどこでも探し求めてきました。私はAndroidを初めて使用し、xmlの代わりにJavaを使用してプログラムで相対レイアウトに項目を追加しようとしています。それを試すためのテストクラスを作成しましたしかし、アイテムは正しくフォーマットされずにスタックし続けます。今のところ、一方のTextViewをもう一方の下に置きたいだけです(最終的には、パラメーターの左と右を使用しますが、簡単に始めます。何が欠けていますか?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ScrollView sv = new ScrollView(this);
    RelativeLayout ll = new RelativeLayout(this);
    ll.setId(99);
    sv.addView(ll);
    TextView tv = new TextView(this);
    tv.setText("txt1");
    tv.setId(1);
    TextView tv2 = new TextView(this);
    tv2.setText("txt2");
    tv2.setId(2);
    RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lay.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    ll.addView(tv, lay);
    RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());
    ll.addView(tv2, p);  this.setContentView(sv);};
16
user597436
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());

この線は、tv2の下部がtv-の下部に揃うことを意味します。つまり、それらは互いに重なり合うことになります。必要なプロパティはおそらくRelativeLayout.BELOW。ただし、代わりにxmlを使用することを強くお勧めします。

21
Jems

使用する:

p.addRule(RelativeLayout.BELOW, tv.getId());
5
Cristian

さまざまなものが欠けています。最初に、ScrollViewにはメジャーがないため、LayoutParams.FILL_PARENTまたはWRAP_CONTENTを使用して設定します。 TextView1が正しく配置されていないため、TextView2、lay.addRule(RelativeLayout.ALIGN_PARENT_TOP、RelativeLayout.TRUE);でTextView1の位置を設定します。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ScrollView sv = new ScrollView(this);
    RelativeLayout ll = new RelativeLayout(this);
    ll.setId(99);

    sv.addView(ll, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

    TextView tv = new TextView(this);
    tv.setText("txt1");
    tv.setId(1);

    TextView tv2 = new TextView(this);
    tv2.setText("txt2");
    tv2.setId(2);
    RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lay.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
    ll.addView(tv, lay);
    RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());
    ll.addView(tv2, p);  
this.setContentView(sv);};
2
Franco