是否将内容动态添加到线性布局?


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>

在根线性布局内部,我想添加多个子线性布局,每个子线性布局的方向都是horizo​​ntal。有了这些,我最终可以得到一个像输出这样的表。

例如,根目录具有布局,例如:

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

由于子线性布局及其内容的数量是动态的,因此我决定以编程方式将内容添加到根线性布局。

如何以编程方式将第二个布局添加到第一个布局,这又可以为每个子级设置所有布局属性,并在子级中添加更多其他元素?

Answers:


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);

view1view2并且view3是你TextView秒。它们很容易以编程方式创建。


5
有人知道为什么吗?如果扩展了LinearLayout,为什么我不能只做this.addView(view1)?
MegaWidget

很好,但是什么时候应该使用它,什么时候应该使用TableLayout呢?这只是个人喜好吗?
泽拉托

我们也必须将线性布局添加到动态horizo​​ntalScrollView中。tnx:)
SemyColon.Me

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

1
如果我们这样做的话。我们如何处理“ layout.child”内部的点击事件?
Warapitiya '16

3
@Warapitiychild.findViewById用于获取元素并设置onclick侦听器。
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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.