Добавление контента в линейный макет динамически? - PullRequest
66 голосов
/ 12 июля 2011

Если, например, я определил корневой линейный макет с вертикальной ориентацией:

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>

Внутри корневого линейного макета я хотел бы добавить несколько дочерних линейных макетов , для каждого из направлений дочернего линейного макета горизонтальный . Со всем этим я мог закончить с таблицей как вывод.

Например, root с дочерним макетом, таким как:

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

Поскольку число дочерних линейных макетов и их содержимое довольно динамично, я решил программно добавить контент в корневой линейный макет.

Как второй макет может быть добавлен к первому программно, который также может установить все атрибуты макета для каждого дочернего элемента и добавить больше других элементов внутри дочернего элемента?

Ответы [ 3 ]

94 голосов
/ 12 июля 2011

В вашем 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 - ваши TextView с. Они легко создаются программно.

69 голосов
/ 12 июля 2011
LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
View child = getLayoutInflater().inflate(R.layout.child, null);
layout.addView(child);
5 голосов
/ 12 июля 2011

Вы можете достичь каскадного 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...