和非嵌套关系,只能作被引用布局的根节点,不可置于内部;前者复用布局,后者消除冗余父容器以优化层级。

Android 的 和 标签不是嵌套关系, 不能写在 里面,所以 是非法写法,会编译报错。
include 用于复用布局
是一个占位标签,用来把另一个 XML 布局文件“插入”到当前布局中。它本身不生成 View,但会把目标布局的根节点(及其子树)原样展开进来。
常见写法:
- 在主布局里写:
- 支持覆盖属性,比如:
(会覆盖被 include 布局根节点的宽高)
merge 用于消除冗余父容器
只能作为 XML 文件的**根节点**使用,作用是告诉系统:这个布局没有自己的 ViewGroup 容器,里面的子 View 应该直接添加到父布局中 —— 从而避免多一层无意义的嵌套。
典型场景:你写了一个头部布局 item_header.xml,但它只是几行 TextView,不需要额外的 LinearLayout 包裹。这时就该用 作根:
这样被 引入时,两个 TextView 就会直接加到父布局里,不会多出一个 节点(它本身不生成 View)。
创想C2C商城系统,系统功能仿照淘宝设计,采用模块标签技术和静态html生成技术 基于Asp.Net/C#+SQL的开发的创想多用户商城系统,具有智能化、高扩展、稳定安全等特性,后台可自由添加频道,自由修改界面风格,商品无限级 分类,支持在线支付整合,通过安装和使用创想C2C商城系统,就可以轻松建立起专业大型的网上交易平台。创想C2C多用户商城系统5.6.3.8版本升级功能1.网站地区设置功能的增
二者配合的关键:merge 必须是被 include 的那个布局的根
也就是说: 指向的 XML 文件,其根节点可以是 ,但 标签自身永远不能包裹 。
正确组合流程:
- 新建
header_merged.xml,根为,内部放实际控件 - 在
activity_main.xml中用 - 运行时,
被“展开”,子 View 直接成为activity_main根布局的子项
注意事项
用 时有几点必须遵守:
-
只能作为根节点,不能出现在中间层级 - 被
的布局若以为根,则无法在 Layout Editor 中预览(因为缺了实际父容器),但运行时完全正常 - 如果被 include 的布局根是
,那么你在标签里设置的宽高、margin 等属性,会直接应用到它的第一个子 View 上(而不是忽略)
基本上就这些。用好 merge + include,能有效减少布局层级,提升渲染性能,尤其在列表 item 或复杂复用模块中很实用。









