LayoutInflater工作

1. LayoutInflater的作用

把xml文件通过一系列复杂的解析过程转换成我们使用的View对象。

2. LayoutInflater的基本使用

View view = LayoutInflater.from(context).inflate(resourceId, parent, false);
可以看到LayoutInflater的使用分两步:
第一步
获取LayoutInflater的实例
LayoutInflater layoutInflater=LayoutInflater.from(context);


第二步
调用inflate()方法来加载布局
inflate(resourceId, parent, false)

里面有三个参数。

  • [ 第一个参数 ]
    是我们要加载的xml文件的名字,通常是R.layout.banner_layout这个样子。

  • [ 第二个参数 ]
    就是我们指定的这个布局的父View。为什么要指定这个parent?假如我们要加载R.layout.banner_layout布局文件。把它转换成view对象之后它该在哪里显示来让我们看到呢,就是这个parent。parent就是这个布局文件的父View。

  • [ 第三个参数 ]
    是一个boolean值,false就是我不要把布局文件添加到parent中,true就是我要把布局文件添加到parent中。如果为false,那么必须要有一个parent.addView(view)的操作我们才能看到布局文件的显示。
    使用RecyclerView的适配器创建ViewHolder对象时

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new MyViewHolder(
                LayoutInflater.from(parent.getContext()).inflate(R.layout.banner_layout, parent, false));
    }

我们发现第三个参数为false,并且也没有使用parent.addView(view)来把它加进parent中,但是它就是更够显示出来。这是因为在 LayoutInflater的源码中有一个parent.addView(view)的操作。

3. 小结

inflate(int resource,ViewGroup root,boolean attachToRoot)的解析
1.如果root为null,attachToRoot将会失去作用,无意义。
2.如果root不为null,attachToRoot设为true.则会给加载的布局文件指定一个父布局,即root。
3.如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view中时,这些layout属性会自动失效。
4.在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。

参考 https://blog.csdn.net/guolin_blog/article/details/121889703?spm=1001.2014.3001.5501

posted @ 2021-08-14 20:47  我的小鱼干嘞  阅读(83)  评论(0编辑  收藏  举报