Android 中的LayoutInflater的理解
LayoutInflater与findViewById的区别?
- 对于一个已经载入的界面,就可以使用findViewById()方法来获得其中的界面元素。
- 对于一个没有被载入或者想要动态载入的界面,就需要使用
LayoutInflater
对象的inflate()
方法来载入。 - findViewById()是查找已被实例化为View对象的xml布局文件下的具体控件(如Button、TextView等),操作对象是一个ViewGroup或者是Activity,返回一个View对象。
LayoutInflater
实例的inflate()
方法是用来将res/layout/
下的xml布局文件实例化,操作对象是XML文件,返回View对象。
LayoutInflater对象的获取方法
- 调用调用Activity对象的getLayoutInflater()
LayoutInflater inflater = getLayoutInflater();
- 通过Context的实例获取
LayoutInflater inflater = LayoutInflater.from(context);
- 还是通过Context的实例获取
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
上面获取LayoutInflater实例的方法实际上殊途同归,都是通过调用Context
的getSystemService
方法去获取的。
先看第二种方法的实现的源码:
public static LayoutInflater from(Context context) {LayoutInflater LayoutInflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);if (LayoutInflater == null) {throw new AssertionError("LayoutInflater not found.");}return LayoutInflater;}
复制代码
通过源码可以看出,第二种方法最终还是通过第三种方法实现的。
Activity 的 getLayoutInflater() 方法是调用 PhoneWindow 的getLayoutInflater()方法,源码如下:
public PhoneWindow(Context context) {super(context);mLayoutInflater = LayoutInflater.from(context);}public LayoutInflater getLayoutInflater() {return mLayoutInflater;}
复制代码
所以可以看出,上述三种方式最终本质是都是调用的Context
实例的getSystemService()
。
inflate()方法
通过 sdk 的 api 文档,可以知道该方法有以下几种过载形式,返回值均是 View 对象:
public View inflate (int resource, ViewGroup root)
resource:View的layout的ID
root:如果为null,则将此View作为一个独立的View存在
如果!null, 那么该View会被直接addView进父View,然后将父View返回。public View inflate (XmlPullParser parser, ViewGroup root)
parser:你需要解析xml的解析接口
root:如果为null,则将此View作为一个独立的View存在
那么该View会被直接addView进父View,然后将父View返回。public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
parser:你需要解析View的xml的解析接口。
如果root为Null,attachToRoot参数无效,而解析出的View作为一个独立的View存在。
如果 root不为Null,attachToRoot设为true,那么该View会被直接addView进父View,然后将父View返回。
如果root不为Null,attachToRoot为false,那么会给该View设置一个父View的约束(LayoutParams),然后将其返回。
当root不为null的话,attactToRoot的默认值是true。public View inflate (int resource, ViewGroup root, boolean attachToRoot)
resource:View的layout的ID
如果root为Null,attachToRoot参数无效,而解析出的View作为一个独立的View存在。
如果 root不为Null,attachToRoot设为true,那么该View会被直接addView进父View,然后将父View返回。
如果root不为Null,attachToRoot为false,那么会给该View设置一个父View的约束(LayoutParams),然后将其返回。
当root不为null的话,attactToRoot的默认值是true。
Android 中的LayoutInflater的理解相关推荐
- Android中pendingIntent的深入理解
pendingIntent字面意义:等待的,未决定的Intent. 要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, ...
- [转]Android中pendingIntent的深入理解
转自;here pendingIntent字面意义:等待的,未决定的Intent. 要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, ...
- 关于Android中RSA数字签名的理解及使用
关于RSA数字签名Android 什么是RSA 我自己的理解 客户端请求服务器的数据 服务器响应客户端的数据 思路 大概流程 注意 加密解密工具类的代码 使用样例 关于RSA数字签名(Android) ...
- android 中MIME类型的理解
初始MIME类型,是在学习ContentProvider的时候. 当在创建自己的ContentProvider的时,需要从抽象类ContentProvider中派生出自己的子类,并实现其中5个抽象方法 ...
- android 获取对象,在Android中获取LayoutInflater对象的方法
1.通过系统服务来获得,这是最标准的: LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYO ...
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
在之前一篇博文中<< Android中View绘制流程以及invalidate()等相关方法分析>> ,简单的阐述 了 Android View 绘制流程的三个步骤,即: 1. ...
- Android中Cursor类的概念和用法
使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android 中使用 Cursor 的理解. 关于 Cursor 在你理解和使用 Android Cursor 的时候你 ...
- Android 中关于Cursor类的介绍
来自:http://www.cnblogs.com/TerryBlog/archive/2010/07/05/1771459.html 使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生, ...
- Android中LayoutInflater的使用
Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater 的作用类似于 findViewById(),不同点是LayoutInflater是用来找layou ...
最新文章
- Spring注解之 @EnableScheduling计划任务注解
- linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本
- AcWing算法提高课 Level-3 第二章 搜索
- vi 打开不同编码的文件
- centos7 dns配置_Centos7.7 安装FreeIPA (三)
- 飞桨 AI Studio 课程学习 可以成为一名优秀的算法工程师
- CodeForces - 1000C Covered Points Count(差分+思维)
- python从视频中提取音频_提取视频中的音频——python三行程序搞定!
- 如何固定最小宽度_如何使用更新的HTML和CSS函数创建响应式设计
- 资料员考试题库计算机,资料员考试试题库及答案(5套).docx
- 计算机真题11Excel,计算机网考真题EXCELPPT操作题答案(11页)-原创力文档
- jq+ajax前端上传多张图片_史上最轻量的前端框架-VanillaJS
- 小学计算机专业说课稿模板,小学信息技术计算机的小管家说课稿
- java在线编辑word_java web实现在线编辑word,并将word导出(一)
- python数据结构与算法 20 递归和递归三定律
- 2022年嵌入式就业居然还挺香的,村口小花每次看见我都微笑
- 【第二章 语言及文法】形式语言与自动机第二章个人总结复习笔记分享!(含文件、持续更新...)
- 关于backgroundColor=red写法是否正确的解答
- 大数据晋级之路(4)Hadoop生态系统体系架构及基本概念
- 我的世界服务器删除启动文件夹,服务器删MOD之后就启动不了了
热门文章
- mysql皮秒转成年月日时分秒_MySQL performance_schema 中 TIMER_*类字段 的易读转换
- python中加入绝对路径_理解Python中的绝对路径和相对路径
- spring boot jar包替换报错之Unable to open nested entry 'BOOT-INF/lib/cache-api-0.4.jar'.
- 10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院
- POJ 3090 Visible Lattice Points 【欧拉函数】
- Cs231n课堂内容记录-Lecture 5 卷积神经网络介绍
- 最大流自用模板(例题:HDU1532)
- gitlab 使用教程
- python后缀名切割_python批量将.xls转化为.xlsx,包括文件名和后缀分割
- 矩阵位移法matlab编程,矩阵位移法_MATLAB_GUI.doc