Android布局优化:< merge >的使用

merge标签主要用于减少布局层数,加快视图绘制,提高UI性能

主要使用场景

  1. 当根布局为FrameLayout时
  2. 当子控件完全不需要依赖父容器时
  3. 当使用include引入另一个布局且该布局和当前布局的视图一致时,可以在子布局中使用merge

举例

我们有layout1.xml和layout2.xml两个布局文件,其中layout1.xml:

<FrameLayout>
<include layout="@layout/layout2"/>
</FrameLayout>

layout2.xml:

<FrameLayout>
<TextView />
<TextView />
</FrameLayout>

最后在layout1.xml中的效果就为

<FrameLayout>
<FrameLayout>
<TextView />
<TextView />
</FrameLayout>
</FrameLayout>

这时候layout2中的FrameLayout就是没有用的,便可以使用merge来消除这个重复的视图。即可以将layout2.xml修改为

<merge>
<TextView />
<TextView />
</merge>

此时layout1.xml中最后的效果就为

<FrameLayout>
<TextView />
<TextView />
</FrameLayout>

这样通过merge便减少了一层布局层数

使用注意

  1. merge只能放在布局文件的根节点上。
  2. merge并不是一个ViewGroup,也不是一个View,它相当于声明了一些等待被添加的视图
  3. 当LayoutInflate加载view中使用的merge标签时,第二个参数不能为null,第三个参数设为true: LayoutInflater.from(context).inflate(R.layout.merge_layout_view, this, true);