关于LayoutInflater.inflater(int resId,ViewGroup root,boolean attchtoroot)第三个参数的问题

参考:https://segmentfault.com/q/1010000006254987/a-1020000006256068


简单的来说,如果每个View都需要一个LayoutParams来确定其布局位置,我们在Layout资源文件中进行的layout(layout_align等)前缀的配置,基本都会记录在LayoutParams中。但是LayoutParams并不是根据当前View来生成的,而是根据父View来定义的。比如一个TextView存在于LinearLayout中,那么它拥有的就是基于LinearLayout.LayoutParams的LayoutParams,因为这样TextView才会拥有LinearLayout所特有的一些布局属性。
那也正是如此,当我们使用LayoutInflater.inflater从资源文件中加载View时,最上层的View是没有父View的,这时候我们在这个View中设置的layout系列参数就有可能应为采用了最基础的LayoutParams而丢失。为了保证不丢失参数,我们可以提供root,它就是一个父View的参考,表示我们使用的LayoutParams与root类所提供的LayoutParams一致。在通常情况下,我们就会给出载入的View即将加入的父View对象,这样一致性更容易保证。
而第三项attchToRoot其实就是一个快捷操作,表示在使用root作为参考时,也同时把View加入到root里,成为root的子View。在Android默认的重载中,我们提供root且不为空时,attchToRoot的值就是true,表示默认就把View加入到了root里。(,null,false)、(root,true)
虽然root和true是Android默认采用的方式,但通常我们不这么使用,因为LayoutInflater.inflater有个很特殊的返回方式,就是当我们传入的attchToRoot为true时,LayoutInflater.inflater会返回root而不是被载入的View本身。而在通常情况下,我们载入View都希望对View进行一些赋值等操作,也就是说我们更希望直接得到View本身。所以通常习惯的搭配是root配false这种方式,在对View赋值完成之后,在加入到root之中。后面再addview

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值