Android 中的LayoutInflater的理解

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux rootfs编译进内核,九鼎x6818开发板笔记:uboot、kernel、rootfs编译和烧写

下面记录了如何搭建嵌入开发环境,如何编译uboot、kernel、和文件系统,如何烧写镜像以及如何配置uboot环境变量。阅读注意:记录中(Base框中的内容)一些操作故意被添加,为了展示文件内容,故意调用cat(Ubuntu)或者type(wi…

figma下载_素描vs Figma困境

figma下载I distinctly remember how much hatred I had in my heart when I lived through my first UI update. The year was 2009; I had just gotten my braces off and I was ready to smash that ‘Like’ button on my high school crush’s status when I logged into …

祝大家七夕快乐,邀你源码共读,顺带发点红包

大家好,我是若川。这是一个普通的周六。只不过又叫七夕节,祝大家七夕节快乐~所以就不更新技术文了。估计还是有很多读者不知道我。若川名字由来是取自:上善若水,海纳百川。顺便放两篇文章。我读源码的经历,跟各位读者朋…

windows 系统监视器 以及建议阀值

windows 系统监视器 以及建议阀值 计数器的说明可以在添加计数器那边 资源 对象\计数器建议的阈值注释磁盘Physical Disk\% Free SpaceLogical Disk\% Free Space15%磁盘Physical Disk\% Disk Time Logical Disk\% Disk Time90%磁盘Physical Disk\Disk Reads/sec、Physical Dis…

前端人员如何在linux服务器上搭建npm私有库

为什么要搭建npm私有库? 为了方便下载时,公共包走npmjs,私有包走内部服务器。npm包下载的速度较慢,搭建npm私有库之后,会先操作私有库中是否有缓存,有缓存直接走缓存,而不用重新再去请求一遍网络。哪种方式…

硬币 假硬币 天平_小东西叫硬币

硬币 假硬币 天平During the last 1,5 years, I’ve been traveling a lot. Apart from my must-have things like laptop, sketchbook, and power bank, there constantly appears a new one, in a familiar shape but a new look. That’s 在过去的1.5年中,我经常…

Linux创建一个用户时分配组,useradd和groupadd(Linux创建用户\用户组\设置\分配用户权限)的使用...

前言:man useradd    man groupadd    info useradd    info groupadd 都可以获取相关命令的用法信息。个人比较喜欢读英文解释文档,没有你想象的那么complicated!😜USERADD(8) System Management Commands USERADD…

尤雨溪发布的Vue 3.2 有哪些新变化?

大家好,我是若川。今天分享一篇 Vue 3.2 版本的文章。查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列1前言8.10号凌晨,尤雨溪在微博平台官宣 Vue 3.2 版本正式发布:此版本包含一系列重要的新功能与性能改进,但并…

对象的清除

调用System.gc() 请求垃圾回收的最简单的方法,但是注意——只是请求,在调用System.gc()之后,有可能会释放出更多的内存空间。转载于:https://www.cnblogs.com/happykakeru/archive/2011/04/09/2010030.html

https://zeplin.io/ 设计图标注及切图

2019独角兽企业重金招聘Python工程师标准>>> https://zeplin.io/ 转载于:https://my.oschina.net/soho00147/blog/3025646

更好的设计接口_设计可以而且必须做得更好

更好的设计接口We live in a world that becomes more dependent on technology every day. Tech gives us new ways to communicate, learn, work, and play, and recently it enabled us to reveal the appalling police brutality towards black people in the US by sharin…

linux隐写文件剥离,杂项的基本解题思路(1)——文件操作隐写、图片隐写

文件操作隐写图片隐写压缩文件处理流量取证技术文章本来是分成4部分的,但是前两部分何在一起写了也就没有分开,所以干脆就只分了两部分文件基本类型的识别一、kail 下file 文件名原理就是识别文件文件头比如这个软件:二、WinHex通过winhex分析…

账务管理系统

2011-04-11 21:55最近写了一个账务管理系统(个人版)使用C#语言编写,编译器VS2010,数据库Access2010,系统采用三层架构,界面可以换肤, 窗体按钮可以移动,可以自定义皮肤,保…

初学者也能看懂的 Vue3 源码中那些实用的基础工具函数

1. 前言大家好,我是若川。最近组织了源码共读活动。每周读 200 行左右的源码。很多第一次读源码的小伙伴都感觉很有收获,感兴趣可以加我微信ruochuan12,拉你进群学习。写相对很难的源码,耗费了自己的时间和精力,也没收…

Flutter RichText支持自定义文字背景

extended text 相关文章 Flutter RichText支持图片显示和自定义图片效果Flutter RichText支持自定义文本溢出效果Flutter RichText支持自定义文字背景Flutter RichText支持特殊文字效果之前介绍过了Extended text,老规矩上图 UI设计说,那个字可以加个卟呤…

细说 Vue.js 3.2 关于响应式部分的优化

大家好,我是若川。上一篇写的是:初学者也能看懂的 Vue3 源码中那些实用的基础工具函数。今天再分享一篇 Vue 3.2 的文章。学习源码整体架构系列、年度总结、JS基础系列背景Vue 3 正式发布距今已经快一年了,相信很多小伙伴已经在生产环境用上了…

linux 运行apj,pxe+ris-linux实现在DELL R710上网络安装windows2003

一、前言网络远程安装windows2003,目前有两种方法:一就是通过windows自带的远程安装服务(RIS,Remote Installation Service),但这种方法需要用windows做为源服务器,需要安装域控制器,dhcp,tftp等…

Debian Security Advisory(Debian安全报告) DSA-4411-1 firefox-esr security update

Debian Security Advisory(Debian安全报告) DSA-4411-1 firefox-esr security update Package :firefox-esr CVE ID: CVE-2018-18506 CVE-2019-9788 CVE-2019-9790 CVE-2019-9791 CVE-2019-9792 CVE-2019-9793 CVE-2019-9795 CVE-2019-9796 CVE…

Entity framework WhereInExtension

摘自 http://www.cnblogs.com/ejiyuan/archive/2009/07/20/1527224.html publicstaticclassWhereInExtension {privatestaticExpression<Func<TElement, bool>>BuildWhereInExpression<TElement, TValue>(Expression<Func<TElement, TValue>>pro…

写给初中级前端的高级进阶指南

大家好&#xff0c;我是若川。最近组织了源码共读活动。每周读 200 行左右的源码。很多第一次读源码的小伙伴都感觉很有收获&#xff0c;感兴趣可以加我微信ruochuan12&#xff0c;拉你进群学习。前言我曾经一度很迷茫&#xff0c;在学了 Vue、React 的实战开发和应用以后&…