Динамічне додавання вмісту до лінійного макета?


79

Якщо, наприклад, я визначив кореневий лінійний макет, орієнтація якого вертикальна:

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>

Всередині кореневого лінійного макета я хотів би додати кілька дочірніх лінійних макетів , кожна з дочірніх лінійних орієнтацій макета горизонтальна . З усім цим я міг би отримати таблицю на зразок виводу.

Наприклад корінь з дочірнім макетом, наприклад:

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

Оскільки кількість дочірніх лінійних макетів та їх вміст досить динамічні, я вирішив програмно додати вміст до кореневого лінійного макета.

Як можна програмно додати перший макет до першого, який також може встановити всі атрибути макета для кожної дочірньої організації та додати більше інших елементів всередині дочірнього?

Відповіді:


102

У вашому onCreate()напишіть наступне

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і view3є вашими TextViews. Вони легко створюються програмно.


5
Хтось знає, чому це? Чому я не можу просто зробити this.addView (view1), якщо це поширює LinearLayout?
MegaWidget

Приємно, але коли я повинен використовувати це, і коли я повинен використовувати TableLayout? Це лише питання особистого смаку?
Zerato 07.03.18

ми також повинні додати лінійний макет в динамічний horizontalScrollView. tnx
:)

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

1
Якщо нам це подобається. Як нам вдається обробляти події кліків усередині "layout.child"?
Малінду,

3
@Warapitiy Використовуйте child.findViewByIdдля отримання елемента та встановлення onclick listener.
Choxmi

5

Ви можете досягти каскадування LinearLayout таким чином:

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

0

Я знайшов більш точний спосіб додавання подань, таких як лінійні макети в kotlin (Передати батьківський макет в inflate () та false)

val parentLayout = view.findViewById<LinearLayout>(R.id.llRecipientParent)
val childView = layoutInflater.inflate(R.layout.layout_recipient, parentLayout, false)
parentLayout.addView(childView)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.