位置: 编程技术 - 正文

LayoutInflater.inflate方法解析

编辑:rootadmin

推荐整理分享LayoutInflater.inflate方法解析,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

LayoutInflater.inflate方法应该是Android程序员最常使用的方法之一了,但是如果使用不当,你会碰见很多的坑。。。今天我就碰到了一个,我找到了解决方法,也打算把它记下来。。。

事情是这样的,我有一个LineaLayout,然后在代码中会inflate若干个View添加到这个LineaLayout中,但是坑出现了。。。

0x 一个栗子

需要添加到LinearLayout中的View布局文件类&#;如下():

这个View的宽固定为dp,高和父容器一样,然后就是inflate这个View并且添加到这个LinearLayout中(我故意将这个布局文件的background设置一个颜色,这样可以很清晰的看出这个View占的位置)

这样写的话,你就会发现布局文件R.layout.layout_menu_item中的android:layout_width="dp"不起作用!!也就是说View.inflate方法忽略了布局文件的宽度设置

可是你又可以发现View.inflate方法中还有第三个参数ViewGroup root,Android文档中是这么写的:

A view group will be the parent. Used to properly inflate the layout_* parameters

那么可以猜想肯定和这个参数有关,下面改写代码:

你就会发现这样写会崩溃!然后下面这样写就没问题了:

View.inflate方法自动将生成的View添加到了这个ViewGroup root中去了!!

你可以inflate多个View,就可以看到下面这样样子了:

0x inflate详解

其实View.inflate方法是调用了LayoutInflater.from(context).inflate(resource, root, root != null)方法,而inflate方法的三个参数如下:

resource: 布局文件的id,比如R.layout.layout_menu_itemroot:这是一个可选参数,resource布局文件中layout_*参数设置的参照物就是这个root,也就是说inflate方法会根据这个root的大小,将resource布局文件中layout_*参数转换成一个LayoutParam对象attachToRoot:是否将这个生成的View添加到这个root中去

inflate方法会返回resource布局文件产生的View

LayoutInflater.inflate方法解析

上面栗子中调用了View.inflate(Context context, int resource, ViewGroup root),这个方法本质上是调用了了LayoutInflater.from(context).inflate(resource, root, root != null),在这个inflate方法中可以找到下面代码:

可见inflate方法自动将这个生成的View添加到了这个root中去了

0x 实验

因为可以调用inflate方法的途径有很多,下面就来做实验总结一下:

实验0

布局文件R.layout.layout_menu_item 中android:layout_height="match_parent" 改为android:layout_height="dp"

实验1

布局文件R.layout.layout_menu_item 中android:layout_height="match_parent" 改为android:layout_height="dp"

实验2

布局文件R.layout.layout_menu_item 中android:layout_height&#;改为match_parent

实验3

布局文件R.layout.layout_menu_item 中android:layout_height&#;改为match_parent

0x 源码分析

实验3的原因在inflate详解中已经介绍过了。

总之原因就在上面代码-行,布局文件R.layout.layout_menu_item生成的View会因为attachToRoot参数为true,就将这个生成的View添加到root中去,然后inflate方法会返回这个root的View

看上面代码-行,如果root不为null的话,就会为这个布局文件R.layout.layout_menu_item生成一个LayoutParam对象,如果attachToRoot参数为false,那么就将这个param对象给这个布局文件的View(看行)。如果attachToRoot参数为true,那么就在上面代码第行,将这个布局文件的View和param参数添加到root中。

0x 总结

调用LayoutInflater.inflate方法,并且将root参数设置为null,就等于忽略了xml布局文件中的layout_×参数

如果root不为null,并且attachRoot=true,那么就会根据root生成一个布局文件View的LayoutParam对象,并且将这个View添加到root中去,并且返回这个root的View

因此,最好还是使用这个代码吧:View v1 = LayoutInflater.from(this).inflate(R.layout.layout_menu_item, layout, false);

参考

Making sense of LayoutInflater

Layout Inflation as Intended

xml输入是如传递给java的 spanstyle=font-size:px;font-family:Arial,Helvetica,sans-serif;background-color:rgb(,,);/spanspanstyle=font-size:px;font-family:Arial,Helvetica,sans-serif;background-color:rgb(,,)

Android提高十七篇之多级树形菜单的实现 在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来做),但是ExpandableList一般只能实现2级树形菜单......本文也依然使

根据两点的经纬度求方位角和距离,等 原文地址:根据两点的经纬度求方位角和距离,等作者:多乎哉不多也多亦不多乎实乃少也最近自己做的一个小东西要用到经纬度方面的计算,查遍中

标签: LayoutInflater.inflate方法解析

本文链接地址:https://www.jiuchutong.com/biancheng/370935.html 转载请保留说明!

上一篇:unity 5 打包apk 手动升级android sdk 5.0 api 21(unity打包安卓apk)

下一篇:xml输入是如传递给java的(xml文件网络传输)

  • 一般纳税人增值税申报操作流程
  • 小微企业城建税优惠政策2023
  • 减免税款递延收入怎么算
  • 增值税税率是怎么规定的
  • 仓库盘亏怎么处理
  • d级企业预缴增值税什么时候可以退回
  • 不超45万是含税还是不含税
  • 指定扣缴和法定扣缴区别
  • 代理缴费业务主要包括
  • 非货币性资产交换固定资产清理
  • 进口货物需要交哪些税
  • 营改增后服务业增值税税率
  • 债务清偿抵充的案例
  • 应付股利科目设置
  • 先预付一部分货款分录
  • 营改增对建筑业的影响有哪些
  • 出口退税进项税额转出是什么意思
  • 交通运输业安全心得体会范文
  • 商业银行固定资产贷款
  • 税控系统抄报税
  • 企业残疾人保障金
  • 公司资产重组流程
  • 旅游业小规模纳税人亏损怎么填报
  • 股金属于金融产品吗
  • window10开始菜单
  • 法人借给公司钱怎么备注
  • phpstorm如何运行
  • linux cls命令
  • 垫付员工保险费的会计科目
  • 完税凭证遗失后怎么处理
  • 前端生成pdf文件
  • 小规模纳税人缴税的分录
  • echartsgrid属性
  • 大学生web前端期刊有哪些
  • 销项负数发票需要入账吗
  • 残保金交错了怎么办
  • 暂估的会计处理
  • 高价值配件用入固定资产吗
  • 筹办分公司
  • 年报和汇算清缴报表口径的区别
  • 手机超过多少钱算贵
  • 个体定额和不定额有什么区别
  • sql server sql文件
  • oracle sql 不等于某个字符
  • MySQL数据库介绍
  • 个人所得税的计算标准
  • 公司走账是什么意思
  • 非盈利组织接受劳务捐赠怎么入账
  • 未支付怎么取消
  • 没有发票如何做会计分录
  • 如何理解非货币性资产
  • 工程材料票占工程款的比例
  • 发票遗失复印件可以入账吗
  • 营业账簿印花税怎么申报
  • 诉讼费用负担原则是什么
  • 运费发票没到可以先计提吗
  • 税收滞纳金计入营业外收入的哪里
  • 公司账本需要保留几年
  • 企业会计的应用指南
  • 内账税费计入什么科目
  • 哪些人必须办理纳税登记
  • 360win7
  • windowsxp怎么开机
  • win10电脑开机蓝屏怎么进入安全模式
  • ecmascript6入门
  • 使用jquery操作dom
  • python自动化处理
  • 一个android项目一般包含哪些目录?各有什么用途?
  • android百分比布局
  • 深入解析windows第7版pdf
  • shell 读取文件中的每一行并存储到数组
  • python编写api接口
  • 税控盘税务数字书驱动找不到应用程序是咋回事
  • 税控盘税务数字证书密码是什么
  • 宁波地税如何网上缴费
  • 河南洛阳医疗保险电话
  • 各种建筑材料税率表
  • 什么东西的海关不能寄
  • 企业的赞助费如何入账
  • 90平房子税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设