Andorid布局优化-include与merge

include

include不多做介绍。主要是可以方便快速复用布局。

  1. include标签的layout_*属性会替换掉被include视图的根节点的对应属性。
  2. include标签的id属性会替换掉被include视图的根节点id

但是通过include会引入一个问题。具体代码如下:

主布局


    



merge_test.xml布局


    
    

代码的例子很简单,通过一个xml文件定义了两个左右排列的TextView。

最后文件被一个主布局通过include引入界面。

出现的问题就是这样会多重复嵌套了一层RelativeLayout。如下

多余.png

为了解决这个问题,google提供了一个与include配套的标签merge,稍作修改如下

merge_test.xml


    
    

修改以后运行,界面上不会有任何修改,但是整体结构上却变成了一层RelativeLayout如下:

merge.png

下面是一些常用的标签的注意事项和小技巧

1.merge必须放在布局文件的根节点上。
2.merge并不是一个ViewGroup,也不是一个View,它相当于声明了一些视图,等待被添加。
3.merge标签被添加到A容器下,那么merge下的所有视图将被添加到A容器下。
4.因为merge标签并不是View,所以在通过LayoutInflate.inflate方法渲染的时候, 第二个参数必须指定一个父容器,且第三个参数必须为true,也就是必须为merge下的视图指定一个父亲节点。
5.如果Activity的布局文件根节点是FrameLayout,可以替换为merge标签,这样,执行setContentView之后,会减少一层FrameLayout节点。
6.自定义View如果继承LinearLayout,建议让自定义View的布局文件根节点设置成merge,这样能少一层结点。
7.因为merge不是View,所以对merge标签设置的所有属性都是无效的。

你可能感兴趣的:(Andorid布局优化-include与merge)