1.merge标签与LayoutInflater.inflate()

前言

根据启舰大大 的博客所学习的滑动删除。

一、merge标签:减少冗余的层次从而达到优化UI的目的

只能作为XML布局的根标签使用
当Inflate以< merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true。 必须为TRUE,是因为MERGE标签里没有可用的根结点

section.xml



    

    

这个直接预览的页面是这样的


1.merge标签与LayoutInflater.inflate()_第1张图片
预览图

将此页面引用:

 

    

得到的页面是这样子的:

1.merge标签与LayoutInflater.inflate()_第2张图片
效果图

由此,可以看出merge标签能够将该标签中的所有控件直接连在上一级布局上面,从而减少布局层级,也就是说会直接将内的元素添加到的父元素里
相当于这样子:



    

    

二、LayoutInflater.inflate()

public View inflate(int resource, ViewGroup root, boolean attachToRoot)  
  • resource: 要将xml转化为view的layout布局
  • root: 根结点,作用主要取决于第三个参数
  • attachToRoot: 是否将转换后的VIEW直接添加到根结点上。
    如果是true,那么在转换出来VIEW之后,内部直接回调用root.addView()将其添加到root结点上,然后返回我们传进去的根结点root;
    如果设为false,那么只会将XML布局转换成对应的VIEW,不会将其添加在我们传进去的root结点上,这时,root结点的作用就是在从XML转换布局时,给它提供上层控件的layot_width、layout_height等布局参数,供它产生视图时计算长宽高的位置,由于新产生的视图不依附于root,所以就整个VIEW而言,根结点就是它自己,所以返回值就是XML产生的VIEW本身,注意,设为false这个VIEW是没有被添加进根结点中的。
  • 返回值:我们第一个先看返回的VIEW的意义,返回的VIEW指向的根结点
   View inflate = getLayoutInflater().inflate(R.layout.section, root, false);
        root.addView(inflate);

等价于

getLayoutInflater().inflate(R.layout.section, root, true);

你可能感兴趣的:(1.merge标签与LayoutInflater.inflate())