2011-07-12 16 views
57

Si, por ejemplo, he definido un diseño raíz lineal cuya orientación es vertical:¿Agregar contenido a un diseño lineal de forma dinámica?

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> 

Dentro del diseño raíz lineal, me gustaría añadir varios diseños lineales niño, cada una de las orientaciones de disposición lineal secundarias es horizontal. Con todo esto podría terminar con una tabla como salida.

Por ejemplo raíz con niño diseño tales como:

<?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> 

Dado que el número de diseños lineales niño y sus contenidos son bastante dinámicos, he decidir añadir contenido a la disposición lineal de raíz mediante programación.

¿Cómo se puede agregar el segundo diseño al primero mediante programación, que también podría establecer todos los atributos de diseño para cada elemento secundario y agregar otros elementos más dentro del elemento secundario?

Respuesta

75

En su onCreate(), escribir el siguiente

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 y view3 son sus TextView s. Se crean fácilmente mediante programación.

+1

¿Alguien sabe por qué es esto? ¿Por qué no puedo hacer esto.addView (view1) si esto extiende LinearLayout? – MegaWidget

+0

Esto está completamente fuera de lugar, pero me resulta increíblemente satisfactorio que cuando destaco su código, las 4 líneas inferiores terminen en la misma columna. Usted ha ganado mi voto exclusivo únicamente por ese motivo. – RobotKarel314

+0

Bien, pero ¿cuándo debería usar esto, y cuando debería usar TableLayout? ¿Es solo una cuestión de gusto personal? – Zerato

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

Si lo hacemos así. ¿Cómo nos las arreglamos para manejar los eventos de clics dentro de "layout.child"? – Warapitiya

+2

@Warapitiy Use 'child.findViewById' para obtener el elemento y configure el escucha onclick. – Choxmi

5

Puede lograr LinearLayout en cascada de esta manera:

LinearLayout root = (LinearLayout) findViewById(R.id.my_root);  
LinearLayout llay1 = new LinearLayout(this);  
root.addView(llay1); 
LinearLayout llay2 = new LinearLayout(this);  
llay1.addView(llay2); 
Cuestiones relacionadas