获取LayoutInflater的三种方式分析

【CANoe16安装教程】亲测安装成功 CANoe16安装教程 阅读详情

对于LayoutInflater的定义,我们来看一下官方文档,
Instantiates a layout XML file into its corresponding android.view.View objects.
意思是,将一个XML文件实例化为对应的View对象。

在实际开发中,我们避免不了需要使用到LayoutInflater类中的inflate()方法。对于LayoutInflater对象的获取,有三种方式。

LayoutInflater inflater = 
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// 第一种方式

LayoutInflater inflater = LayoutInflater.from(context);// 第二种方式

LayoutInflater inflater = activity.getLayoutInflater();// 第三种方式

那么这三种方式有什么区别呢?

(1).第一种方式
getSystemService()是Android很重要的一个API,它是Context类的一个方法,根据传入的name来取得对应的Object,然后转换成相应的服务对象。Context.LAYOUT_INFLATER_SERVICE表示我们取得的是实例化layout的服务对象。

(2).第二种方式
我们来看一下它的内部实现。

/**
 * Obtains the LayoutInflater from the given context.
 */
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;
}

from()是LayoutInflater中的一个静态方法,返回LayoutInflater对象。我们可以看到,方法内部其实使用的是context.getSystemService(),也就是上述第一种方式。

(3).第三种方式
getLayoutInflater()是Activity类的一个方法,也就是说只有通过Activity类的引用才能调用,相比于第一种和第二种方式,此种方式存在一定的使用局限。我们来看一下它的内部实现。

Activity类的关键代码

package android.app;

public class Activity extends ContextThemeWrapper implements ... {
    ......
    private Window mWindow;
    ......

    @NonNull
    public LayoutInflater getLayoutInflater() {
        return getWindow().getLayoutInflater();
    }

    public Window getWindow() {
        return mWindow;
    }

    final void attach(...) {
        ......
        mWindow = new PhoneWindow(this);
        ......
    }

    ......
    ......
}

从源码可以看到,当我们调用getLayoutInflater()方法时,方法内部先调用了getWindow()方法,而getWindow()返回的是Activity类的mWindow成员变量,mWindow是Window类的引用。当Activity被创建时,会调用attach()方法,在attach()方法里面完成mWindow成员变量赋值,mWindow实际上是PhoneWindow类的对象。Window是一个抽象类,其内部的getLayoutInflater()方法是abstract的,PhoneWindow类继承自Window类,实现了getLayoutInflater()方法,即我们最终调用的是PhoneWindow类的getLayoutInflater()方法。

Window类的关键代码

package android.view;

public abstract class Window {

    ......

    @NonNull
    public abstract LayoutInflater getLayoutInflater();

    ......

}

PhoneWindow类的源码SDK并未给我们提供,从Android源码中我们可以找到PhoneWindow类的实现,路径\platform_frameworks_base-master\core\java\com\android\internal\policy\PhoneWindow.java。

PhoneWindow类的关键代码

package com.android.internal.policy;

public class PhoneWindow extends Window implements MenuBuilder.Callback {

    ......

    private LayoutInflater mLayoutInflater;

    ......

    public PhoneWindow(Context context) {
        super(context);
        mLayoutInflater = LayoutInflater.from(context);
    }

    @Override
    public LayoutInflater getLayoutInflater() {
        return mLayoutInflater;
    }

    ......
}

到这里,真相大白了。PhoneWindow类的getLayoutInflater()方法,内部使用的其实是LayoutInflater.from(context),即上述第二种方式。

**结论:
获取LayoutInflater对象,最终都是通过调用Context类的getSystemService()方法来实现的。**

狂神说docker(最全笔记) 一.Docker入门 1. Docker 为什么会出现 2. Docker的历史 3.Docker最新超详细版教程通俗易懂 Docker是基于Go语言开发的!开源项目 官网 官方文档Docker文档是超详细的 仓库地址 4. 虚拟化技术和容器化技术对比 4.1. 虚拟化技术的缺点 资源占用十分多 冗余步骤多 启动很慢 2.2. 容器化技术 比较Docker和虚拟化技术的不同 传统虚拟机, 虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软. 阅读详情

相关推荐

LSTM预测股票数据---数据预处理

# 导入相应的模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 获取训练集 def get_train_data(data,batch_size = 60 ,time_step = 20,train_begin = 0,train_end = 58...

qq_35358021的博客 3360

获得 LayoutInflater 实例的三种方式

1.LayoutInflaterinflater=getLayoutInflater();//调用Activity的getLayoutInflater() 2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService ...

程序员一代码搬运工 147

windows局域网文件夹共享

windows局域网共享文件夹,亲测,包括可能出现的一些问题解决

yml15180824993的博客 4万+

获取LayoutInflater的三种方法

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。 具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用Layo

u012435852的博客 339

C# typeof() 和 GetType()区别

总得来说他们都是为了获取某个实例具体引用的数据类型System.Type。 1、GetType()方法继承自Object,所以C#中任何对象都具有GetType()方法,x.GetType(),其中x为变量名,由x实例返回得到一个类型 2、typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称,返回一个类型 3、System.Type.GetType(),有两个重载方法 比如有这样一个变量i: Int32 i = new Int32(); 使用GetType(),i...

Peter的博客 1956

18650电池组流体直冷热管理仿真:COMSOL多物理场耦合建模路线与实战策略

在动力电池与储能系统的热管理设计中,多物理场耦合仿真已成为平衡性能与成本的关键工具。液冷方案的换热极限促使行业转向制冷剂直冷技术,而两相流与电池产热的强耦合特性,使得基于COMSOL的数值建模成为评估系统温升与流动分配的重要手段。工程实践中,电化学-热-流场全耦合模型与集总电池-流场简化模型各有适用场景,前者揭示电池内部微观机理,后者则以高计算效率支撑包级方案迭代。通过合理简化几何、标定内阻与熵热系数、设置等效换热边界,仿真能够准确预测直冷系统在快充或大倍率放电下的温度均匀性与压降特性,从而指导流道优化与制

weixin_33585822的博客 314

Context.LAYOUT_INFLATER_SERVICE的使用

http://www.xici.net/d196141378.htm

qq_40824360的博客 4171

深度解析大众点评反爬机制:构建高可用店铺评论采集系统(2026最新实战)

在中文互联网数据采集领域,大众点评(现归属美团)始终占据着特殊地位。其丰富的UGC(用户生成内容)包含了超过2亿条真实店铺评论、数百万家商户的详细POI信息以及用户行为数据,对商业分析、口碑监测、本地生活趋势研究具有不可替代的价值。然而,大众点评的安全团队投入了顶级资源构建反爬系统——从请求签名、行为验证到设备指纹,其防御强度甚至超过多数电商平台。本文将完整呈现一套2026年依然有效的技术方案,包括破解核心参数_token、动态代理池维护、无头浏览器指纹伪装等,最终产出一个生产级采集框架。目录。

2201_76125261的博客 814

获取LayoutInflater的三种方式

第一种:  LayoutInflater inflater = getLayoutInflater(); 直接在Activity中得到。 第二种: LayoutInflater inflater2 = LayoutInflater.from(context);通过context来得到。 第三种: context.getSystemService(LAYOUT_INFLATER_SERVI

ni357103403的博客 452

国自然基金申请书撰写新思路:如何合理利用AI提高本子竞争力?

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。创新点、技术路线、前期基础,但是我们也可以把写好的初稿交给AI,让它扮演资深研究员,帮我们精炼表述、优化段落结构,并揪出可能被评审追问的逻辑漏洞。,我们需要的是让它帮我们理清楚思路,而不是让它替我们完成内容。

智能AI让学术科研更容易 665

Qt + windows + Linux+QtInstallerFramework打包教程

本文介绍了使用Qt Installer Framework在Windows和Linux系统下打包Qt应用程序的完整教程。Windows部分详细说明了从下载安装框架、配置环境变量、生成release版本,到创建安装包目录结构和修改配置文件的完整流程。Linux部分则重点讲解了环境变量设置、桌面应用配置(.desktop文件)以及两种打包方案:一种使用linuxdeployqt生成AppImage文件,另一种采用类似Windows的安装包方式。教程提供了关键配置文件(config.xml、package.xml

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 516

Android之LayoutInflater三种方式分析

获取LayoutInflater有三种不同的方式,那么这三种方式有什么区别呢? 源码: ① LayoutInflater inflater = LayoutInflater.from(context);  (LayoutInflater类) public static LayoutInflater from(Context context) { LayoutInflater Lay

violetIC的专栏 670

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1659

LayoutInflater的使用

LayoutInflater的作用主要是用来加载布局的。广泛用于动态添加View布局。相关点 通过在Activity中,setContentView()方法也是用来加载布局的,其实setContentView的内部也是使用LayoutInflater来加载布局的 与findViewById是什么关系?findViewById()是找xml布局文件下具体的widget控件。LayoutInflater

fumier的专栏 546

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LayoutInflater

LayoutInflater作用是将layout的xml布局文件实例化为View类对象。 实现LayoutInflater的实例化共有3种方法, (1).通过SystemService获得     LayoutInflaterinflater = (LayoutInflater)context.getSystemServices(Context.LAYOUT_INFLATER_SERVICE

hdxf2010的专栏 411

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

一篇永远搞定LayoutInflater源码

由现象到源码分析LayoutInflater参数的差异造成的问题

我的安卓之路 378

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android 源码系列之<四>从源码的角度深入理解LayoutInflater.Factory之主题切换(上)

现在越来越多的APP都加入了换肤功能或者是日间模式和夜间模式等,这些功能不仅增加了用户体验也增强了用户好感,众所周知QQ和网易新闻的APP做的用户体验都非常好,它们都有日间模式和夜间模式的主题切换。实现主题切换的效果大部分是更换相关背景、字体颜色等,网上这篇文章对换肤讲解的比较不错,今天我们也是来从源码的角度来理解一下主题切换功能,如果你对这块非常熟悉了,请跳过本文(*^__^*) …

快乐de灰太狼的专栏 9191

Android 自定义view

Version:1.0 StartHTML:0000000177 EndHTML:0000157049 StartFragment:0000025553 EndFragment:0000157009 SourceURL:file:///Y:\Desktop\学习\新建文件夹\自定义view.docx Android 自定义view Android LayoutInflater原理分析 ...

weixin_40193331的博客 196

获取View实例——LayoutInflater

文章来自https://github.com/NieJianJian/AndroidNotes,内容将持续更新,欢迎star。 1. LayoutInflater使用场景 LayoutInflater我们都用到过,比如在RecyclerView中加载一个View: public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(mConte

聂建jian的专栏 1212

获得xml解析器LayoutInflater 实例的三种方式

转载

aknew123的博客 426

再看LayoutInflater,这次你可能又会有新的认识

今天不想去聊一些Android的新功能,新特性之类的东西,特别想聊一聊这个老生常谈的话题:LayoutInflater。 现在看我文章的多数是一些老Android了,相信每个人使用起LayoutInflater都是家常便饭,信手拈来。 但即使是这样,我仍然觉得这个知识点有可以分析的地方,看完之后或许你对LayoutInflater又会有一些新的认识。 首先概括一下LayoutInflater是用来做什么的。 我们都知道,在开发Android应用程序的时候,编写布局基本都是通过xml文件来编写的。当然

郭霖的专栏 2万+

Android LayoutInflater源码分析

获取LayoutInflater对象 inflate方法参数说明 源码分析 案例说明 当 root == null 当 root != null && attachToRoot == true 当 root != null && attachToRoot == false

xiangxiongfly 688

android layoutinflater原理分析,Android LayoutInflater 源码解析

在上篇文章中我们学习了setContentView的源码,还记得其中的LayoutInflater吗?本篇文章就来学习下LayoutInflater。@Overridepublic void setContentView(int resId) {ensureSubDecor();ViewGroup contentParent = (ViewGroup) mSubDecor.findViewById...

weixin_30311179的博客 202

Android中的LayoutInflater分析(一)

ps:本篇文章是基于 Android Api 26 来分析的目录1、LayoutInflater 创建过程2、LayoutInflater 创建 View 过程在 Android 中,La...

qq_37837621的博客 799

LayoutInflater 三种获得方式

LayoutInflater 作用是从外部加载一个xml布局文件。 获得 LayoutInflater 实例的三种方式: 1.LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater() 2.LayoutInflater localinflater =(LayoutInfla...

weixin_30260399的博客 80
下一篇: 原生下拉刷新SwipeRefreshLayout的使用
ruancoder
博客等级 码龄10年 42粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值