布局加载器LayoutInflater讲解
来源:互联网 发布:百度统计 数据 编辑:程序博客网 时间:2024/05/18 06:54
第一次写博客博客有些小激动啊,嘿嘿,话不多说直接上代码
一般我们写代码中用布局加载器加载常用的就是这三种方式,第三种应该大家都知道这里就不说了,而主要问题就集中在第一种和第二种方法的区别、
那我们直接来看第一个和第二个方法
这里我先给出这两种方式在作为listview或者recyclerview的item 的时候显示结果,稍后再解释为啥会这样
以recyclerview为例
第一种
加载item 的时候条目根布局的宽高设置无效,直接为wrap_content如下图
第二种
加载item 的时候条目根布局宽高设置的dp有效,宽度match_parent有效,高度设置match_parent无效高度显示为wrap_content如下
看了效果想必大家很疑惑为什么两种加载方式会有如此大的区别,为了搞清原因那我们就从源码中一探究竟、
第一种
源码对应如下
第二种
源码对应如下
最后这两个方法都走了这个方法里面
这个方法里面我们只要看关键的这几步就好了
这个方法是根据之前的布局id生成一个View为temp,然后如果root != null并且 attachToRoot为false的时候给temp设置params,而这个params值就是xml中自己设置的值, 父容器只影响view的LayoutParams的类型,注意不影响具体数值.
root.generateLayoutParams(attrs);这个方法如下
后面再走着两个方法
只有root != null 并且 attachRoot为true的时候才会把布局加到root上
而当root == null 或者 attachToRoot 为 false 该方法就直接返回了temp,
看完了这些我们再来分析上面两种加载方式为啥效果不同
第一个方法 root == null
直接返回了根据xml生成的view而没有添加layoutParams,而又因为view默认的LayoutParams为wrap_content所以,第一种方式无论怎么设置宽高都是包裹内容
第二种方式
root != null 并且 attach == false
直接返回的就是根据xml生成的view,并且设置了根据xml生成的对应数值的LayoutParams,所以这个设置dp就是有效的,而高度之所以设置match_parent没效果因该跟ListView的特性有关,应该是不允许高度设置match_parent
所以
一般情况下推荐使用第二种方式加载布局
- 布局加载器LayoutInflater讲解
- Android LayoutInflater(布局加载器)详解
- LayoutInflater加载布局
- layoutInflater动态加载布局
- LayoutInflater 动态加载布局
- LayoutInflater如何加载布局?
- LayoutInflater 动态加载布局文件
- LayoutInflater 动态加载布局文件
- Android布局加载之LayoutInflater
- 布局加载器LayoutInflater的三种获取方法
- Android 中LayoutInflater(布局加载器)之介绍篇
- Android 中LayoutInflater(布局加载器)之源码篇
- Android 中LayoutInflater(布局加载器)之实战篇
- 使用LayoutInflater动态加载布局和…
- LayoutInflater的使用:动态加载布局
- LayoutInflater 加载布局文件失败原因
- LayoutInflater动态加载布局方法实例
- 动态加载布局LayoutInflater.inflate()源代码解析
- mysql-5.7.10 mac 安装和卸载
- iOS,SQLite
- iOS OTA方式安装测试
- oracle中插入数据时自动生成主键的触发器
- 如何为VMware vcenter server的网卡eth0配置静态IP?
- 布局加载器LayoutInflater讲解
- 访问权限控制总结
- iOS多线程开发——NSOperation/NSOperationQueue浅析
- leetcode:198 House Robber-每日编程第二十二题
- zeros--创建零矩阵
- 关于安卓多线程while(true)方法占用CPU高的原因及其解决方法
- 潍坊长安医院骗患者钱
- POJ 2242|ZOJ 1090 The Circumference of the Circle
- eye--创建单位矩阵