LayoutInflater与findViewById的区别?

  • 对于一个已经载入的界面,就可以使用findViewById()方法来获得其中的界面元素。
  • 对于一个没有被载入或者想要动态载入的界面,就需要使用LayoutInflater对象的inflate()方法来载入。
  • findViewById()是查找已被实例化为View对象的xml布局文件下的具体控件(如Button、TextView等),操作对象是一个ViewGroup或者是Activity,返回一个View对象。
  • LayoutInflater实例的inflate()方法是用来将res/layout/下的xml布局文件实例化,操作对象是XML文件,返回View对象。

LayoutInflater对象的获取方法

  1. 调用调用Activity对象的getLayoutInflater()

    LayoutInflater inflater = getLayoutInflater();

  2. 通过Context的实例获取

    LayoutInflater inflater = LayoutInflater.from(context);

  3. 还是通过Context的实例获取

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

上面获取LayoutInflater实例的方法实际上殊途同归,都是通过调用ContextgetSystemService方法去获取的。

先看第二种方法的实现的源码

 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的理解相关推荐

  1. Android中pendingIntent的深入理解

    pendingIntent字面意义:等待的,未决定的Intent. 要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, ...

  2. [转]Android中pendingIntent的深入理解

    转自;here pendingIntent字面意义:等待的,未决定的Intent. 要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, ...

  3. 关于Android中RSA数字签名的理解及使用

    关于RSA数字签名Android 什么是RSA 我自己的理解 客户端请求服务器的数据 服务器响应客户端的数据 思路 大概流程 注意 加密解密工具类的代码 使用样例 关于RSA数字签名(Android) ...

  4. android 中MIME类型的理解

    初始MIME类型,是在学习ContentProvider的时候. 当在创建自己的ContentProvider的时,需要从抽象类ContentProvider中派生出自己的子类,并实现其中5个抽象方法 ...

  5. android 获取对象,在Android中获取LayoutInflater对象的方法

    1.通过系统服务来获得,这是最标准的: LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYO ...

  6. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)

    在之前一篇博文中<< Android中View绘制流程以及invalidate()等相关方法分析>> ,简单的阐述 了 Android View 绘制流程的三个步骤,即: 1. ...

  7. Android中Cursor类的概念和用法

    使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android 中使用 Cursor 的理解. 关于 Cursor 在你理解和使用 Android Cursor 的时候你 ...

  8. Android 中关于Cursor类的介绍

    来自:http://www.cnblogs.com/TerryBlog/archive/2010/07/05/1771459.html 使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生, ...

  9. Android中LayoutInflater的使用

    Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater 的作用类似于 findViewById(),不同点是LayoutInflater是用来找layou ...

最新文章

  1. Spring注解之 @EnableScheduling计划任务注解
  2. linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本
  3. AcWing算法提高课 Level-3 第二章 搜索
  4. vi 打开不同编码的文件
  5. centos7 dns配置_Centos7.7 安装FreeIPA (三)
  6. 飞桨 AI Studio 课程学习 可以成为一名优秀的算法工程师
  7. CodeForces - 1000C Covered Points Count(差分+思维)
  8. python从视频中提取音频_提取视频中的音频——python三行程序搞定!
  9. 如何固定最小宽度_如何使用更新的HTML和CSS函数创建响应式设计
  10. 资料员考试题库计算机,资料员考试试题库及答案(5套).docx
  11. 计算机真题11Excel,计算机网考真题EXCELPPT操作题答案(11页)-原创力文档
  12. jq+ajax前端上传多张图片_史上最轻量的前端框架-VanillaJS
  13. 小学计算机专业说课稿模板,小学信息技术计算机的小管家说课稿
  14. java在线编辑word_java web实现在线编辑word,并将word导出(一)
  15. python数据结构与算法 20 递归和递归三定律
  16. 2022年嵌入式就业居然还挺香的,村口小花每次看见我都微笑
  17. 【第二章 语言及文法】形式语言与自动机第二章个人总结复习笔记分享!(含文件、持续更新...)
  18. 关于backgroundColor=red写法是否正确的解答
  19. 大数据晋级之路(4)Hadoop生态系统体系架构及基本概念
  20. 我的世界服务器删除启动文件夹,服务器删MOD之后就启动不了了

热门文章

  1. mysql皮秒转成年月日时分秒_MySQL performance_schema 中 TIMER_*类字段 的易读转换
  2. python中加入绝对路径_理解Python中的绝对路径和相对路径
  3. spring boot jar包替换报错之Unable to open nested entry 'BOOT-INF/lib/cache-api-0.4.jar'.
  4. 10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院
  5. POJ 3090 Visible Lattice Points 【欧拉函数】
  6. Cs231n课堂内容记录-Lecture 5 卷积神经网络介绍
  7. 最大流自用模板(例题:HDU1532)
  8. gitlab 使用教程
  9. python后缀名切割_python批量将.xls转化为.xlsx,包括文件名和后缀分割
  10. 矩阵位移法matlab编程,矩阵位移法_MATLAB_GUI.doc