开发者问题收集

多次包含相同布局

2013-10-05
14103

我有一个通用布局 (common.xml),我想将其多次包含在另一个布局 (layout_a.xml) 中。但它只显示一次。为什么?

common.xml

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@android:drawable/alert_light_frame">

        <ImageView

            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:id="@+id/imageView"

            android:src="@drawable/test"

            android:scaleType="centerCrop" />

        <TextView

            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_below="@+id/imageView"
            android:id="@+id/textView"
            android:text="test"
            android:layout_marginTop="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp" />
    </RelativeLayout>
</merge>

layout_a.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/common" />

    <include layout="@layout/common" />
</LinearLayout>
3个回答

在 XML 中定义的 ID 必须是唯一的。您正在包含两个布局,这些布局的视图包含相同的 ID。

下面 是修复此问题的方法。

附言:除非您没有在第一个布局文件中包含更多代码,否则合并标签毫无用处。

btse
2013-10-05

正如 btse 所说,XML 中的 id 必须是唯一的。 可以通过这种方式实现:

<include android:id="@+id/common1"
    layout="@layout/common" />

<include android:id="@+id/common2"
    layout="@layout/common" />

有关如何访问这两个包含视图中的元素的信息,您可以查看 这篇 博客文章。

Ashray Mehta
2013-10-05

这就是我在项目中使用 Inflater 所做的事情。 test1 只是一个使用 LinearLayout(Vertical) 制作的布局,其中包含文本和按钮,以及 mainofferslayout (在这种情况下,是带有图像的主布局)。

// Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_offers_display, container, false);

    View inflatedLayout = inflater.inflate(R.layout.test1, (ViewGroup) view, false);
    LinearLayout ll = (LinearLayout) view.findViewById(R.id.mainofferslayout);

    ll.addView(inflater.inflate(R.layout.test1, (ViewGroup) view, false));
    ll.addView(inflater.inflate(R.layout.test1, (ViewGroup) view, false));
    ll.addView(inflater.inflate(R.layout.test1, (ViewGroup) view, false));
Maespi
2018-10-22