Android 动态添加布局match_parent无效

今天写项目碰到一个问题,先上图:


Android 动态添加布局match_parent无效_第1张图片
问题.png

下面是RecyclerView,addheader之后系统消息的布局设置了
match_parent,但显示的时候无效。代码如下:


Android 动态添加布局match_parent无效_第2张图片
出错得代码.png

既然出问题了就要解决问题,由于之前没有碰到过这样的问题,第一个想法是是不是RecyclerView出问题了,但是很快否决掉了,因为上面的轮播图也是addHeader添加上的。那么问题应该就是出现在:View view=LayoutInflater.from(activity).inflate(R.layout.rolling,null);
这句代码上了。

查看源码1

inflater1.png

我们传的root为null,那么这里调用另外的方法传值为false;

查看源码2

Android 动态添加布局match_parent无效_第3张图片
inflate2.png

这里吧false又传给其他方法

查看源码3

Android 动态添加布局match_parent无效_第4张图片
inflate3.png

这里可以看到,如果传过来的是false,那么重新设置了view的LayoutParams,那么就可以确定,动态添加view为啥match_parent属性不生效了,只要传null值,默认就会重置LayoutParams属性

那么怎么解决呢?Android发展这么久了,系统不会不给解决的办法,那么从同名的inflate入手,找到的方法如下


Android 动态添加布局match_parent无效_第5张图片
如果是false,属性和父类是无关的,用xml布局中的属性.png

由此可见,该方法如果设置最后一个参数为false,那么布局会加载xml的属性,不受ViewGroup影响。

修改代码如下:

Android 动态添加布局match_parent无效_第6张图片
解决问题.png

运行效果如下:
Android 动态添加布局match_parent无效_第7张图片
好了.png

总结一句:Android看源码真的很重要


Android 动态添加布局match_parent无效_第8张图片
二维码.jpg

推荐下本人的微信公众号,本博客及其他方面的消息会定期同步到公众号上面!

你可能感兴趣的:(Android 动态添加布局match_parent无效)