Dynamisches Hinzufügen von Inhalten zu einem linearen Layout?

79

Wenn ich zum Beispiel ein lineares Grundlayout definiert habe, dessen Ausrichtung vertikal ist:

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>

Innerhalb des linearen Grundlayouts möchte ich mehrere untergeordnete lineare Layouts hinzufügen. Jede Ausrichtung des untergeordneten linearen Layouts ist horizontal . Mit all diesen könnte ich eine tabellenähnliche Ausgabe erhalten.

Zum Beispiel root mit untergeordnetem Layout wie:

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

Da die Anzahl der untergeordneten linearen Layouts und deren Inhalt sehr dynamisch sind, habe ich beschlossen, dem linearen Root-Layout programmgesteuert Inhalte hinzuzufügen.

Wie kann das zweite Layout programmgesteuert zum ersten hinzugefügt werden, wodurch auch alle Layoutattribute für jedes untergeordnete Element festgelegt und weitere weitere Elemente innerhalb des untergeordneten Elements hinzugefügt werden können?

Leem
quelle

Antworten:

102

onCreate()Schreiben Sie Folgendes in Ihr

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, view2Und view3sind Ihre TextViews. Sie können einfach programmgesteuert erstellt werden.

Sherif elKhatib
quelle
5
Weiß jemand warum das so ist? Warum kann ich this.addView (view1) nicht einfach ausführen, wenn dies LinearLayout erweitert?
MegaWidget
Schön, aber wann sollte ich das verwenden und wann sollte ich stattdessen TableLayout verwenden? Ist es nur eine Frage des persönlichen Geschmacks?
Zerato
Wir müssen auch der dynamischen horizontalen ScrollView ein lineares Layout hinzufügen. tnx
:)
76
LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
View child = getLayoutInflater().inflate(R.layout.child, null);
layout.addView(child);
gregory561
quelle
1
Wenn uns das gefällt. Wie schaffen wir es, Klickereignisse in "layout.child" zu behandeln?
Warapitiya
3
@Warapitiy Verwenden Sie diese Option child.findViewById, um das Element abzurufen und den Listener onclick festzulegen.
Choxmi
5

Sie können LinearLayout wie folgt kaskadieren:

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
quelle
0

Ich habe eine genauere Möglichkeit gefunden, Ansichten wie lineare Layouts in Kotlin hinzuzufügen (übergeordnetes Layout in inflate () und false übergeben).

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