2011-07-12 15 views
57

Jeśli na przykład mam zdefiniowany układ liniowy, którego korzeń jest orientacja pionowa:Dynamiczne dodawanie zawartości do układu liniowego?

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/my_root" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 

    <!-- I would like to add content here dynamically.--> 

</LinearLayout> 

Wewnątrz układ korzeniowy liniowego, chciałbym dodać kilka podrzędne układy liniowe, każda z orientacji układu liniowego podrzędnego to pozioma. Z tymi wszystkimi mogłem skończyć z tabelą jak wyjście.

na przykład root z dziecka układu, takich jak:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/my_root" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 

    <!-- 1st child (1st row)--> 
    <LinearLayout 
     ... 
     android:orientation="horizontal"> 

      <TextView .../> 
      <TextView .../> 
      <TextView .../> 
    </LinearLayout> 

    <!-- 2nd child (2nd row)--> 
    ... 
</LinearLayout> 

Ponieważ liczba dzieci układów liniowych i ich zawartości są dość dynamiczny, mam zdecydować, aby dodać treść do układu liniowego głównego programowo.

W jaki sposób drugi układ może zostać dodany do pierwszego programu, który może również ustawić wszystkie atrybuty układu dla każdego dziecka i dodać więcej innych elementów do elementu potomnego?

Odpowiedz

75

w twojej onCreate(), napisać następujące

LinearLayout myRoot = (LinearLayout) findViewById(R.id.my_root); 
LinearLayout a = new LinearLayout(this); 
a.setOrientation(LinearLayout.HORIZONTAL); 
a.addView(view1); 
a.addView(view2); 
a.addView(view3); 
myRoot.addView(a); 

view1, view2 i view3 są twoi TextView s. Są łatwo tworzone programowo.

+1

Ktoś wie, dlaczego tak jest? Dlaczego nie mogę po prostu zrobić this.addView (view1), jeśli to rozszerza LinearLayout? – MegaWidget

+0

Jest to zupełnie nie na miejscu, ale uważam, że jest to niezwykle satysfakcjonujące, gdy podświetlając twój kod, dolne 4 linie kończą się w tej samej kolumnie. Zasłużyłeś na moje uprowadzenie wyłącznie z tego powodu. – RobotKarel314

+0

Dobrze, ale kiedy powinienem użyć tego i kiedy powinienem użyć TableLayout zamiast tego? Czy to tylko kwestia osobistego gustu? – Zerato

61
LinearLayout layout = (LinearLayout)findViewById(R.id.layout); 
View child = getLayoutInflater().inflate(R.layout.child, null); 
layout.addView(child); 
+1

Jeśli robimy tak. Jak zdołamy obsłużyć zdarzenia kliknięcia w "layout.child"? – Warapitiya

+2

@Warapitiy Użyj 'child.findViewById', aby uzyskać element i ustawić detektor onclick. – Choxmi

5

Można osiągnąć LinearLayout kaskadowe tak:

LinearLayout root = (LinearLayout) findViewById(R.id.my_root);  
LinearLayout llay1 = new LinearLayout(this);  
root.addView(llay1); 
LinearLayout llay2 = new LinearLayout(this);  
llay1.addView(llay2); 
Powiązane problemy