如何使用带参数的<include>重新使用布局?

时间:2016-04-14 08:15:47

标签: android

我遇到了问题,就是我有一些ViewGroup,它们的内容几乎相同。像这样:

<LinearLayout>
    <TextView android:text="aaa"/>
    <ImageView android:src="bbb"/>
</LinearLayout>

<LinearLayout>
    <TextView android:text="ccc"/>
    <ImageView android:src="ddd"/>
</LinearLayout>

我想转换成这个:

<include layout="xxLayout"
    param1="aaa"
    param2="bbb"/>
<include layout="xxLayout"
    param1="ccc"
    param2="ddd"/>


xxLayout.xml
<LinearLayout>
    <TextView android:text="{param1}"/>
    <ImageView android:src="{param2}"/>
</LinearLayout>

我知道我可以使用java代码。可以只使用xml吗?

4 个答案:

答案 0 :(得分:1)

您可以使用此

           <include
            android:id="@+id/banner"
            layout="@layout/login_banner" />

banner是包含标记的id,login_banner是您要在XML中膨胀的不同布局

答案 1 :(得分:1)

像这样使用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
             android:id="@+id/vgroup1"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             layout="@layout/viewgrup1"" />

    <include
                android:id="@+id/vgroup2"
                layout="@layout/viewgrup2"" />
</LinearLayout>

答案 2 :(得分:1)

您可以将自定义视图组与attibute param1,param2一起使用。包含与您的需求不匹配

答案 3 :(得分:1)

由于数据绑定库,只能使用xml来实现:

首先将xxLayout.xml包装在布局中,然后添加一个数据绑定类定义,该定义列出了要传递到所包含布局中的变量。

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable name="myText" type="java.lang.String"/>
        <variable name="mySrc" type="android.graphics.drawable.Drawable"/>
    </data>

    <LinearLayout>
        <TextView android:text="@{myText}"/>
        <ImageView android:src="@{mySrc}"/>
    </LinearLayout>
</layout>

然后使用数据绑定库来增加包含的布局,并使用数据绑定语句注入所需的值。有关数据绑定表达式语言及其支持的详细信息,请参见databinding library documentation

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout>
        <include layout="xxLayout"
            app:myText="@{`aaa`}"
            app:mySrc="@{@drawable/bbb}"/>
        <include layout="xxLayout"
            app:myText="@{`ccc`}"
            app:mySrc="@{@drawable/ddd}"/>
    </LinearLayout>
</layout>