将xml导入到另一个xml中
我有很多控制重复在我的xml
(例如一个Button
)。 有没有可能在xml
编写一次Button
,然后将其导入到我需要的所有布局中?
您可以使用
<include layout="@layout/commonlayout" android:id="@+id/id" />
commonlayout.xml
应该在res/layout
中定义,你可以添加重复的部分。
正如Labeeb P所说的那样,它是有效的。 只是想补充一点,你也可以重写参数:
<include layout="@layout/commonlayout" android:id="@+id/id" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginLeft="2sp" android:layout_marginRight="2sp" />
除了这些很好的答案之外,您还可以通过使用<merge>
标记来避免代码重复,如下所示:
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/delete"/> </merge>
将其包含到其他xml中时, <merge>
部分将被剥离。 这可能有助于一次包含多个Button
。 请参阅官方文档 。
您可以使用默认的include
XML标签来包含外部布局:
<include layout="@layout/somelayout" />
这个布局应该有一个封装内容的外部ViewGroup
或一个merge
标签,以避免使用不必要的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_world" /> </LinearLayout> <!-- OR --> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_world" /> </merge>
另外,如果您需要更好的方法来包含像容器(自定义ViewGroup
)那样的布局,您可以使用此自定义ViewGroup 。 请注意,这不会将XML导入到另一个XML文件中,它会从外部布局中膨胀内容并将其replace到视图中。 它类似于ViewStub
,类似于“ViewGroupStub”。
这个库的作用就好像ViewStub
可以用作下面的一样( 注意,这个例子不起作用! ViewStub
不是ViewGroup
子类! ):
<ViewStub layout="@layout/somecontainerlayout" inflate_inside="@+id/somecontainerid"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_world" /> </ViewStub>