android LayoutInflater.inflate()的参数介绍

View.inflate()和LayoutInflater.inflate()的区别 一、LayoutInflater.inflate() 1. 获取LayoutInflater实例 getLayoutInflater(); 这个方法可以在Activity和Fragment中使用,不过在Fragment中使用时,要传入一个bundle参数 // Activity中使用 LayoutInflater layoutInflater = getLayoutInflater(); //... 阅读详情

转自:http://www.cnblogs.com/wenfei123chai/p/4597404.html

LayoutInflater.inflate()的作用就是将一个xml定义的布局文件实例化为view控件对象;

 

与findViewById区别:

 LayoutInflater.inflate是加载一个布局文件;

 findViewById则是从布局文件中查找一个控件;

 

一.获取LayoutInflater对象有三种方法

LayoutInflater inflater=LayoutInflater.from(context);


LayoutInflater inflater=getLayoutInflater();在Activity中可以使用,实际上是View子类下window的一个函数


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

 

二:inflate 参数

public View inflate(int resource, ViewGroup root, boolean attachToRoot) :

reSource:View的layout的ID 
root:需要附加到resource资源文件的根控件,inflate()会返回一个View对象,如果第三个参数attachToRoot为true,就将这个root作为根对象返回,否则仅仅将这个root对象的LayoutParams属性附加到resource对象的根布局对象上,也就是布局文件resource的最外层的View上。如果root为null则会忽略view根对象的LayoutParams属性(注意)。

attachToRoot:是否将root附加到布局文件的根视图上


例子:

LayoutInflater  inflater  = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.fragment, root,false);

或者:

v = inflater.inflate(R.layout.fragment, null);

 

常见问题:

有时候我们在Adapter加载自定义的view布局文件,布局文件中设置了android:layout_height="100dip",但是运行程序后发现一点作用都没有,相似的还有layout_width等以android:layout_开头的属性设置都没有作用;

因为Adapter里有一个方法是getView,这个返回的VIew是一个从XML布局里加载的,一般如下:

View v = inflater.inflate(R.layout.fragment, null);
 
问题恰恰出在我们的LayoutInflater.from(mContext).inflate(R.layout.main, null);这句代码上,在使用inflate的时候,如果第二个参数(View root)为null,那么将不会加载你的布局文件里的最顶层的那个布局节点的布局相关配置(就是以android:layout_开头的属性)..我们可以看下该方法的实现来说明一下,通过查找源代码,inflate的实现都在这个public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot) 方法里定义。。其中一段:
          if (root != null) {
                        if (DEBUG) {
                            System.out.println("Creating params from root: " +
                                    root);
                        }
                        // Create layout params that match root, if supplied
                        params = root.generateLayoutParams(attrs);
                        if (!attachToRoot) {
                            // Set the layout params for temp if we are not
                            // attaching. (If we are, we use addView, below)
                            temp.setLayoutParams(params);
                        }
                    }

代码中可以发现:当root为null的时候是不会执行params = root.generateLayoutParams(attrs);这段代码的,这段代码就是把xml里的布局配置转为LayoutParams,换句说就是加载我们配置的布局属性,以供布局类(FrameLayout等)在onLayout的时候控制View的大小、位置、对齐等等。。以FrameLayout为例,看下它的generateLayoutParams(attrs)方法。
 
解决办法:
 
使用LayoutInflate的inflate方法的时候一定要保证root参数不能为null,其实这个root就是父View的意思,就是说你把xml转换为一个VIew的时候,该VIew的Parent是root,如果你不想把该View添加到该root里,那么让第三个参数 attachToRoot为false,如果要添加则为true.
Pwntools不只是PWN:用它写个自动化Fuzz脚本,挖掘Linux命令行工具漏洞 本文探讨了如何利用Pwntools构建自动化Fuzz脚本,挖掘Linux命令行工具中的漏洞。通过详细的代码示例和实战案例,展示了Pwntools在Fuzzing中的高效性和灵活性,特别适合快速验证特定场景的安全问题。文章还提供了进阶技巧和避坑指南,帮助安全研究人员快速上手并提升测试效率。 阅读详情

相关推荐

Selenium实战:突破反爬,自动化抓取国家知识产权局专利数据

网络爬虫是数据采集的核心技术,其原理是通过程序模拟浏览器行为,自动访问网页并提取结构化信息。在数据驱动决策的今天,高效获取公开数据对市场分析、技术调研和竞争情报至关重要。然而,面对广泛应用的JavaScript动态渲染和反爬虫机制,传统的静态页面抓取方法往往失效。Selenium作为浏览器自动化工具,通过驱动真实浏览器执行JavaScript,能够有效绕过前端反爬,实现“可见即可得”的数据抓取,在需要与页面进行复杂交互或处理动态内容的场景中价值显著。本文以【专利数据】抓取为例,结合【Selenium】工具,

weixin_33881140的博客 392

Android——关于Fragment的使用

关于Fragment的使用,总结几个要点:1、创建Fragment类,需要Fragment。用周期方法中的onCreateView方法,通过参数inflater.inflate将自己定义的Fragment布局转换成View,一个Fragment对应一个布局。inflater.inflate(R.layout.home_fragment, null)2、在mainactivity中布局给Fragmen

Li_peilun的博客 575

时序数据库避坑指南:TDengine与IoTDB在车联网场景的7个关键对比

本文对比了时序数据库TDengine与IoTDB在车联网场景下的7个关键差异,包括数据模型设计、边缘-云端协同能力、车规级函数库、存储压缩算法等。通过真实案例和性能测试,帮助企业在新能源汽车大数据处理中选择合适的时序数据库,优化存储成本和实时告警性能。

rust6ferris的博客 452

Android的inflater使用和原理(一次性讲完)

LayoutInflater.inflate我们经常用于加载View,比如:RecyclerView/ListView的item加载、Fragment.onCreateView、Dialog和PopupWindow setContextView等,有些时候我们明明设置了宽高,最后在显示时却没有效果。

Mark Wu 的博客 1487

ubuntu22.04 安装部署 openclaw

ubuntu22.04 安装部署 openclaw

nalanxiaoxiao2011的博客 966

WSL2离线安装Ubuntu终极指南:绕过Microsoft Store慢速下载(附最新22.04 LTS离线包)

本文提供WSL2离线安装Ubuntu 22.04 LTS的完整指南,帮助开发者绕过Microsoft Store下载慢的问题。通过PowerShell命令配置环境、获取离线安装包并完成安装,同时包含初始配置、资源优化及常见问题解决方案,助您快速搭建高效的Linux开发环境。

c8d9e0f1的博客 898

Android LayoutInflater.inflate()方法参数详解

LayoutInflater.inflate()的作用就是将一个xml定义的布局文件实例化为view控件对象; 1.三个参数的inflate方法 LayoutInflater类inflate(int resource, ViewGroup root, boolean attachToRoot)方法三个参数的含义 resource:需要加载布局文件的id,意思是需要

dzning123的专栏 924

Mplus实战:随机截距交叉滞后模型(RI-CLPM)在心理学纵向研究中的进阶应用

本文深入探讨了随机截距交叉滞后模型(RI-CLPM)在心理学纵向研究中的进阶应用,通过Mplus实战演示了模型设定、结果解读及进阶建模策略。RI-CLPM能有效区分个体间差异和个体内变化,适用于追踪青少年手机使用与抑郁症状等研究。文章还提供了样本量规划、模型比较和结果可视化等实用技巧,助力研究者避免常见陷阱。

weixin_29220405的博客 369

三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东。本篇博客我们不讲源码,只看使用。源码的解读会在下一篇博文中带来。inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法。在这两类中又有细分,OK,那我们就把各种情况都...

weixin_30687051的博客 1276

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1310

MATLAB - 浮动基座机器人的逆运动学

本例演示如何解决以浮动底座为模型的机器人的逆运动学问题。浮动底座机器人可以在空间中自由平移和旋转,具有六个自由度。浮动基座机器人的逆运动学问题适用于空间应用,即使用安装在浮动和致动基座上的机械臂在空间操纵物体,也适用于躯干和腿部可在空间自由移动的行走机器人。请注意,刚体树对象表示具有固定基体的刚体树。这意味着刚体树的基体在世界中具有固定的位置和方向。您可以在基体上附加一个 “浮动 ”类型的刚体关节,为具有浮动基体的机器人建模,以用于动态模拟等某些应用。

机器人控制与仿真应用 2438

Android开发之LayoutInflater.from(context).inflate()方法参数介绍解决RecyclerView加载布局不全的问题

咱们先看下item的xml布局高度为64dp <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="1dp"

xiayiye5的博客 2270

【原理图PCB专题】Cadence 17.4版本导出excel版本坐标文件

Cadence 17.4版本导出坐标文件往往都是txt格式,并且无标题、导出时间、导出设计工程多名称等信息。那么怎么样才能导出有带这些信息的excel版本并格式好看的坐标文件呢?

一点硬件 2763

LayoutInflater.inflate()方法解析

1、基本介绍在开发中 LayoutInflater. inflate() 这个方法还是非常有用的,它的作用类似于 findViewById()。不同点是 inflate() 是用来找 res/layout/ 下的 xml 布局文件,并且实例化,而 findViewById() 是找 xml 布局文件下的具体 widget 控件(如 Button、TextView 等)。对于一个没有被载入或者想要动态

HardWorkingAnt的博客 4157

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android LayoutInflater的获取及inflate()参数和返回值

Android LayoutInflater是我们在Android App开发中特别是自定义view时候经常常用的一个类。也许你开发中没有特别注意到它,但其实我们都直接或间接的使用它了。这里主要说明Android LayoutInflater的获取方式及其inflate()参数和返回值的关系。LayoutInflater获取LayoutInflater layoutInflater = (Layo...

weixin_38503885的博客 1266

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LayoutInflater.inflate全面解读

LayoutInflater.inflate() 是 Android 系统中用于将 XML 布局文件转换成相应的 View 的方法。在 Android 开发中,我们经常使用此方法来动态创建和填充布局。参数含义:int resource: 这是要加载的 XML 布局资源 ID;ViewGroup root: 可选的 ViewGroup 参数,它作为新创建View的父容器。如果提供了父容器,inflate 过程会考虑父容器的 LayoutParams,并可能根据需要调整新创建视图的属性;

川川的博客 1884

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android LayoutInflater.inflate()的参数及其用法

inflate()的作用就是将一个用xml定义的布局文件查找出来,注意与findViewById()的区别,inflate是加载一个布局文件,而findViewById则是从布局文件中查找一个控件。 1.获取LayoutInflater对象有三种方法 LayoutInflater inflater=LayoutInflater.from(this); LayoutInfl

syj的博客 424

Android:LayoutInflater(布局服务)的 简单介绍 & 使用方法解析

LayoutInflater布局服务LayoutInflater1、什么是LayoutInflater?2、如何调用inflate()函数3、inflate()方法参数解析3.1、attachToRoot何时为true,何时为false?3.2、LayoutInflater.from这个方法什么意思?4、Java代码加载布局使用流程5、Java代码动态加载xml布局参考 LayoutInflater 1、什么是LayoutInflater? Layout是什么? 答:一个用于加载布局的系统服务,就是实例化

JMW1407的博客 2018

Android —— inflate( )使用

1. LayoutInflater基本用法 LayoutInflater的基本用法,首先需要获取到LayoutInflater的实例,有两种方法可以获取到 第一种写法如下: LayoutInflater layoutInflater = LayoutInflater.from(context); 第二种写法,也可以完成同样的效果: LayoutInflater layoutInfl...

weixin_38327420的博客 2079

View.Inflate()和LayoutInflate填充布局详解

# View.Inflate()和LayoutInflate填充布局详解 ### View.Inflate() ##View.Inflate(Context context,int resource, ViewGroup root)查看源码:    public static View inflate(Context context, @LayoutRes int resource, ViewGr...

baidu_36619149的博客 1709

inflate浅析

对于加载布局,有两种情况: 1.直接用setContentView(int resourceID);,加载后将会立即显示。 2.inflate()动态加载,生成一个View类的对象,有需要时再进行显示。 那么inflate()该怎么使用呢? inflate()是类LayoutInflater的方法,所以得先生成LayoutInflater的对象。 1.生成类LayoutI

张之海的博客 861

Android LayoutInflater(布局填充器)原理分析

一 前言 相信在用过listview的朋友都知道,在加载item布局的时候,我们会用到LayoutInflater去加载,那么这个利用LayoutInflater去填充布局的方法和我们常规使用的setContentView()有什么不同呢?接下来我们从源码的角度具体分析一下这个LayoutInflater的原理 二 LayoutInflater的基本用法 2.1 第一种用法: LayoutInflater layoutInflater = LayoutInflater.from(context); 2.2

qq_39431405的博客 388

[Android分享] LayoutInflater原理分析

本文转载自:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=921664&page=1&authorid=652933相信对于Android开发人员来说,LayoutInflater类应该不会陌生,主要用于加载布局。而Activity中setContentView()方法也是用于加载布局,但是在方法的内部,同样使用的LayoutInfla

u012424449的博客 448
上一篇: android 自定义ViewGroup实现仿淘宝的商品详情页
下一篇: Android 6.0 运行时权限处理完全解析
MrCoderr
博客等级 码龄12年 39粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值