Программное добавление элементов в относительный макет - PullRequest
16 голосов
/ 31 января 2011

Я всюду искал ответ на этот вопрос.Я новичок в Android и пытаюсь добавить элементы в относительный макет программно через Java вместо XML.Я создал тестовый класс, чтобы опробовать его, но элементы продолжают складываться вместо правильного форматирования.Я просто хочу один 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);};

Ответы [ 3 ]

21 голосов
/ 31 января 2011
    p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId());

Эта строка означает, что нижняя часть tv2 выровнена с нижней частью tv - другими словами, они будут перекрывать друг друга. Предполагаемая недвижимость - RelativeLayout.BELOW. Однако я настоятельно рекомендую вместо этого использовать xml.

5 голосов
/ 31 января 2011

Использование:

p.addRule(RelativeLayout.BELOW, tv.getId());
2 голосов
/ 31 января 2011

вам не хватает разных вещей, во-первых, ScrollView не имеет мер, установите его с помощью LayoutParams.FILL_PARENT или WRAP_CONTENT, во-вторых;это TextView1 неуместно, поэтому TextView2, установите позицию TextView1 с lay.addRule (RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);

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);};
...