LayoutInflater.from(this).inflate()参数解析

LayoutInflater.from(this).inflate(layoutId, root, boolean);
LayoutInflater.from(this).inflate(layoutId, root);


布局填充器,填充布局时,不同参数会有不同的反差效果。很郁闷,怎么不是我想要的?
很久以前深入理解过,又总是忘记。下面已我自己的理解方式记录下来,便于日后速查。
网上大神有总结:
1. 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。
2. 如果root不为null,attachToRoot设为true,则会给加载的布局文件的指定一个父布局,即root。
3. 如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。
4. 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。




绝对精辟,我相信。但不满足于此。
我关心的是:
1、当前的item局部是否添加到父容器中?
2、当前的布局跟容器宽高属性是否生效?
3、inflate()方法返回的是哪个容器?




做实验得出结论:


1、
返回的view是父容器布局(不是item布局的跟容器,如例中的root布局);
item跟布局的宽高属性生效(item布局的跟容器宽高属性生效);
已经添加到父容器中(item布局已经添加到root中了)。

RelativeLayout root = (RelativeLayout) findViewById(R.id.other_layout);
View view2 = LayoutInflater.from(this).inflate(R.layout.item, root, true);
View view5 = LayoutInflater.from(this).inflate(R.layout.item, root);


2、
返回R.layout.item页面的跟布局(item跟布局);
跟布局的宽高属性生效;
未添加到父容器中。

RelativeLayout root = (RelativeLayout) findViewById(R.id.other_layout);
View view1 = LayoutInflater.from(this).inflate(R.layout.item, root, false);


3、返回R.layout.item页面的跟布局;
跟布局的宽高属性失效(仅宽高属性失效,其他属性生效);
未添加到父容器中。

View view3 = LayoutInflater.from(this).inflate(R.layout.item, null, false);
View view4 = LayoutInflater.from(this).inflate(R.layout.item, null, true);
View view6 = LayoutInflater.from(this).inflate(R.layout.item, null);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值