【问题标题】:Can't correct add child to LinearLayout无法正确将子项添加到 LinearLayout
【发布时间】:2015-11-03 11:05:03
【问题描述】:

我有一个简单的任务 - 将子视图动态添加到 LinearLayout,但我不知道如何以正确的方式完成。

有两种方式:

1.膨胀视图并将父容器传递给膨胀方法。

View view = LayoutInflater.from(getActivity()).inflate(R.layout.item, container, true);

在这种情况下,当我有多个孩子时,LayoutInfater 每次膨胀时都会返回相同的子视图对象。所以我可以正确初始化其他子视图。

2。下一个方法是使用LinearLayout方法addView(View view)。

问题是,子视图失去了它的 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"/>

那么在不以编程方式添加 LayoutParams 且不使用包装布局的情况下,将子级添加到 LinearLayout 的正确方法是什么?

非常感谢您的帮助!

【问题讨论】:

  • 您可以查看问题。问题将线性布局作为父视图,并将 tableLayout 添加为子视图。 stackoverflow.com/questions/31847066/…
  • 在这个示例中,根子布局没有自定义布局参数。 (如固定 layout_width 或 layout_height)
  • 您要修复子视图的宽度和高度吗?或者你不想修复它?线性布局是根布局,不是自定义的。
  • 当你的孩子的根布局有,例如layout_height="50dp",所以当你把这个孩子添加到容器中时,比如container.addView(child),孩子的layout_height设置为wrap_content,因为它是 LayoutParams 参数。

标签: android android-linearlayout addchild


【解决方案1】:

你试过这个方法吗?

View view= LayoutInflater.from(getActivity()).inflate(R.layout.item, null, false);

parentView.addView(view);

【讨论】:

  • 是的,子视图失去了它的 LayoutParams 状态。
  • 但是为什么要避免创建 layoutParams?很简单。
  • 我知道这很容易)我问了,因为可能有人有更好的解决方案)
【解决方案2】:

如果你想给RelativeLayout添加child,你需要为child view设置LayoutParams,如果你想给LinerLayout添加child,你不需要设置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)

【讨论】:

    【解决方案3】:

    试试这个方法,

    View view = LayoutInflater.from(getActivity()).inflate(R.layout.item, **container**, false);
    layout.addView(view);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多