2011-01-31 19 views
16

Szukałem wszędzie odpowiedzi na to pytanie. Jestem nowy na Androida i próbuję dodać elementy do względnego układu programowo za pośrednictwem java zamiast xml. Stworzyłem klasę testową, aby wypróbować, ale elementy nadal układają się w stosy zamiast poprawnie formatować. Ja po prostu chcę jeden TextView pod drugą do teraz (w końcu będę używał lewo i prawo parametrów ale zaczynam prosta. Czego mi brakuje?Programowe dodawanie elementów do względnego układu

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

Odpowiedz

20
p.addRule(RelativeLayout.ALIGN_BOTTOM, tv.getId()); 

Linia ta oznacza, że ​​na dnie TV2 jest dopasowany do dolnej części ekranu telewizora - innymi słowy, będą się wzajemnie zakrywać.Właściwości, którą chcesz, jest prawdopodobnie RelativeLayout.BELOW. Jednak zdecydowanie zalecam użycie zamiast tego xml.

+1

Dziękuję, to było rzeczywiście RelativeLayout.Below, ale wystarczająco blisko. Problem z robieniem xml jest ostatecznie zapełniany z zewnętrznej bazy danych. – user597436

2

brakuje ci różnych rzeczy, najpierw ScrollView nie ma żadnych miar, ustaw go za pomocą LayoutParams.FILL_PARENT lub WRAP_CONTENT, po drugie, to TextView1 są zgubione, więc TextView2, s et Pozycja TextView1 z 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);}; 
+0

Wystąpił tutaj błąd, linia p.addRule (RelativeLayout.ALIGN_BOTTOM, tv.getId()); musi być dokładnie jak @Cristian mówi: p.addRule (RelativeLayout.BELOW, tv.getId()); – Franco

5

Zastosowanie:

p.addRule(RelativeLayout.BELOW, tv.getId()); 
Powiązane problemy