Android inflate方法宽高处理

Android开发中使用inflate方法,必不可少,无论是在自定义adapter中,还是在代码中使用自定义View时。该方法有四个重载方法,本文着重讨论使用public View inflate(int resource, ViewGroup root)方法时,对生成的View宽高进行处理,因为此方法使用参数限制较少,应用最为广泛。

使用public View inflate(int resource, ViewGroup root)该方法生成View让人最为头疼的地方在于,他使资源文件resource最外层的控件的layout_xxx属性失效,具体原因,请参考:http://www.2cto.com/kf/201407/313054.html。因此,针对于该问题最简单也最实用的解决方案就是在你自己的资源文件最外层再添加一个Linearlayout或者RelativeLayout,具体请参考博客:http://blog.csdn.net/mr_orange_klj/article/details/44908155。使用如下图所示:
Android inflate方法宽高处理_第1张图片

但是,如果你自己定义的资源最外层控件的height或width属性值是match_parent(fill_parent),那么上述方法就不能完美解决这个问题了,因为添加的额外的布局控件(Linearlayout或者RelativeLayout)自身的height或width属性值是match_parent(fill_parent),额外控件不能被正确测量,那么自己定义资源的最外层控件属性值就不能依赖parent相关了。此时,解决问题就需要在代码中处理了,原理与上述方法一致。现在的问题是宽高match_parent无法测量,但是我们可以在代码中获取到屏幕的宽高,在代码中使用View的setLayoutParams(layoutParams);方法,可以将宽高值手动设置给自己定义资源的最外层控件,那么额外的外层控件就能测量自己定义资源的最外层控件的宽高了。具体请看图:
1. 布局文件:
Android inflate方法宽高处理_第2张图片

可以看到该布局文件与上面布局文件的不同之处在与自定义资源的最外层控件需要使用match_parent属性值。

2.代码处理:
这里写图片描述

主要思路就是,获取到屏幕宽高,主动把宽高值赋给我们自定义资源的最外层控件(318行,find到自定义资源的最外层控件;319~321行,给自定义资源的最外层控件赋值),然后我们添加的额外布局控件就能正确测量自定义资源的最外层控件的大小了。

本文所有内容就只有这么多了,如果大家有更好对这个问题的解决办法,欢迎拍砖~

你可能感兴趣的:(Android)