可以澄清<include>和<merge>的用法

我只需要有人告诉我,如果我正确理解何时使用<include>和何时<merge>

所以,我做了一个我想包括到其他XML布局的标题布局:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Header text" /> </LinearLayout> 

我用这种方式将其包含到其他XML中(这是非常基本的):

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <include android:id="@+id/header" layout="@layout/top" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 

这将工作得很好,没有问题。 但为了优化代码,我必须在包含的布局中使用<merge> 。 所以top layout不应该有一个标签<LinearLayout>但它必须是这样的:

 <merge xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Header text" /> </merge> 

我有正确的理解吗?

Solutions Collecting From Web of "可以澄清<include>和<merge>的用法"

是的,你理解正确。 merge被用作伪父元素来减less视图树中的级数。 只要检查这个链接 ,它提供了非常好的merge解释。
在你的头文件中

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <include android:id="@+id/header" layout="@layout/top" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 

当您的文件包含在您提到的其他文件中时, <LinearLayot>没有任何区别。 所以使用merge来代替是一件好事。
由于在XML中,您必须使用单个父元素,其余的XML元素应该包含在其中,您应该使用merge作为单个父元素,并且可以避免添加不必要的父布局。
只要避免“合并”,当你想应用一个布局不同于布局是在你的内容被包含在文件中定义。

根据我的理解,它会将合并元素设置为视图层次结构中的更高元素。 包括将简单地把整个视图组在那里。 所以使用你的例子,视图层次应该是这样的:

合并:

 LinearLayout (root) | TextView 

包括:

 LinearLayout (root) | LinearLayout | TextView 

所以你将在视图层次结构中有一个额外的LinearLayout,你不需要。 但是,有时您需要中间视图。 在你的情况,你不会,因为这两个LinearLayouts具有相同的布局参数,没有其他差异。