¿Agregar contenido a un diseño lineal de forma dinámica?

79

Si, por ejemplo, he definido un diseño lineal raíz cuya orientación es vertical:

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 lineal raíz, me gustaría agregar varios diseños lineales secundarios , cada una de las orientaciones del diseño lineal secundario es horizontal . Con todo esto, podría terminar con una tabla como salida.

Por ejemplo raíz con niño disposición tal 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 secundarios y sus contenidos son bastante dinámicos, he decidido agregar contenido al diseño lineal 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 niño y agregar más elementos dentro del niño?

Leem
fuente

Respuestas:

102

En tu onCreate(), escribe lo 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, view2y view3son tus TextViews. Se crean fácilmente mediante programación.

Sherif elKhatib
fuente
5
¿Alguien sabe por qué es esto? ¿Por qué no puedo simplemente hacer this.addView (view1) si esto extiende LinearLayout?
MegaWidget
Bien, pero ¿cuándo debería usar esto y cuándo debería usar TableLayout en su lugar? ¿Es solo una cuestión de gusto personal?
Zerato
también debemos agregar un diseño lineal en horizontalScrollView dinámico. tnx
:)
77
LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
View child = getLayoutInflater().inflate(R.layout.child, null);
layout.addView(child);
gregory561
fuente
1
Si nos gusta esto. ¿Cómo nos las arreglamos para manejar los eventos de clic dentro de "layout.child"?
Malindu
3
@Warapitiy Se usa child.findViewByIdpara obtener el elemento y configurar el oyente al hacer clic .
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);
Balaji Khadake
fuente
0

Encontré una forma más precisa de agregar vistas como diseños lineales en kotlin (Pase el diseño principal en inflate () y false)

val parentLayout = view.findViewById<LinearLayout>(R.id.llRecipientParent)
val childView = layoutInflater.inflate(R.layout.layout_recipient, parentLayout, false)
parentLayout.addView(childView)
Bajrang Hudda
fuente