我有一个简单的任务 - 动态地将子视图添加到LinearLayout,但我不知道,如何以正确的方式执行。
有两种方法:
1。膨胀视图并将父容器传递给inflate方法。
View view = LayoutInflater.from(getActivity()).inflate(R.layout.item, container, true);
在这种情况下,当我有多个子节点时,LayoutInfater每次都会在对其进行充气时返回相同的子视图对象。所以我可以正确初始化其他子视图。
2。下一种方法是使用LinearLayout方法addView(视图视图)。
问题是,子视图丢失了它的LayoutParams状态。 我必须以编程方式为子设置新的LayoutParams。这是一个不太好的做法。
此外,我们可以将子项放在他自己的布局资源文件中的免费包装器布局中。但这也是一个不好的做法,将布局放到包装器上。
我的孩子资源:
<RelativeLayout android:gravity="center_vertical"
android:paddingLeft="25dp"
android:layout_width="match_parent"
android:layout_height="@dimen/list_item_height">
<TextView android:id="@+id/tv_name"
android:text="Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
那么将子项添加到LinearLayout的正确方法是什么,而不是以编程方式添加LayoutParams而没有包装器布局?
非常感谢您的帮助!
答案 0 :(得分:0)
你有这样的尝试吗?
View view= LayoutInflater.from(getActivity()).inflate(R.layout.item, null, false);
parentView.addView(view);
答案 1 :(得分:0)
如果要将子项添加到RelativeLayout,则需要为子视图设置LayoutParams,如果要将子项添加到LinerLayout,则不需要设置LayoutParams,因此如果要自定义layoutParams,我建议你使用RelativeLayout,或者你可以为子视图创建一个包装器视图,就像:
//inflate a wrapper view
View child = LayoutInflater.from(getActivity()).inflate(R.layout.item, container, false);
//add to a linerLayout
LinerLayout.addChild(child)
答案 2 :(得分:0)
试试这种方式,
View view = LayoutInflater.from(getActivity()).inflate(R.layout.item, **container**, false);
layout.addView(view);