我有一个问题,那就是我有一些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吗?
多亏了数据绑定库,仅使用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>
然后使用数据绑定库使包含的布局膨胀,并使用数据绑定语句注入所需的值。有关数据绑定表达语言及其支持的详细信息,请参见数据绑定库文档。
<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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句