2012-05-19 13 views
14

Ogłosiłem RelativeLayout w pliku układu XML. Teraz chcę dodać Views z kodu do istniejącego układu. Dodałem Button dynamicznie do tego istniejącego układu jak poniżej za pomocą kodu:Jak dynamicznie dodawać widoki do RelativeLayout już zadeklarowanego w układzie xml?

rLayout = (RelativeLayout)findViewById(R.id.rlayout); 
     LayoutParams lprams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
     Button tv1 = new Button(this); 
     tv1.setText("Hello"); 
     tv1.setLayoutParams(lprams); 
     tv1.setId(1); 
     rLayout.addView(tv1); 

Teraz trzeba dodać kolejny Button po prawej już dodany Button. Nie jestem w stanie znaleźć sposobu, w jaki mogę dodać nowy na prawo od wcześniej dodanego przycisku.

Odpowiedz

21

Dodaj regułę RelativeLayout.RIGHT_OF na drugi dodaje ButtonLayoutParams:

// first Button 
    RelativeLayout rLayout = (RelativeLayout) findViewById(R.id.rlayout); 
    RelativeLayout.LayoutParams lprams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    Button tv1 = new Button(this); 
    tv1.setText("Hello"); 
    tv1.setLayoutParams(lprams); 
    tv1.setId(1); 
    rLayout.addView(tv1); 

    // second Button 
    RelativeLayout.LayoutParams newParams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    Button tv2 = new Button(this); 
    tv1.setText("Hello2"); 
    newParams.addRule(RelativeLayout.RIGHT_OF, 1); 
    tv2.setLayoutParams(newParams); 
    tv2.setId(2); 
    rLayout.addView(tv2); 
+0

co się stanie, jeśli mam wiele dynamicznych przycisk i przedostatni dotknie krawędzi? Co się stało z ostatnim? – cheloncio

+0

@zhelon prawdopodobnie zostanie wypchnięty na zewnątrz lub ściśnięty. Jeśli wiesz, że będziesz miał wiele przycisków niż potrzebujesz, aby zawinąć 'RelativeLayout' w' ScrollView' lub 'HorizontalScrollView'. – Luksprog

+0

Jeśli używam RelativeLayout, ponieważ dynamicznie tworzę przyciski, skąd mam wiedzieć, o której godzinie dotknął krawędzi? – cheloncio

0

Utwórz kolejny przycisk:

Button tv2 = new Button(this); 
tv2.setText("World"); 
tv2.setLayoutParams(lprams); 
tv2.setId(2); 

Dodaj go dodać do swojej RelativeLayout:

rLayout.addView(tv2); 
1

może być to może pomóc, spróbuj.

rLayout = (RelativeLayout)findViewById(R.id.rlayout); 
LayoutParams lprams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 

TableLayout tl=new TableLayout(this); 
rLayout.addView(tl); 

TableRow tr1=new TableRow(this); 
tl.addView(tr1); 

Button btn1 = new Button(this); 
btn1.setText("Hello"); 
btn1.setLayoutParams(lprams); 
btn1.setId(1); 
tr1.addView(btn1); 

TextView tv1 = new TextView(this); 
tv1.setWidth(40); 
tv1.setHeight(LayoutParams.WRAP_CONTENT); 
tr1.addView(tv1); 


Button btn2 = new Button(this); 
btn2.setText("World"); 
btn2.setLayoutParams(lprams); 
btn2.setId(2); 
tr1.addView(btn2); 
Powiązane problemy