您的位置:首页 > 移动开发 > Android开发

android:layout_weight的一点理解

2016-06-19 16:37 375 查看
这是Stack Overflow中关于layout_weight中的一些解释,其实有的时候感觉这个问答社区里的回答还是蛮直白蛮,蛮好理解的。推荐大家可以多利用利用,还可以锻炼英文哦。

官方文档对weight的解释是:

Indicates how much of the extra space in the LinearLayout will be allocated to the view associated with these LayoutParams. Specify 0 if the view should not be stretched. Otherwise the extra pixels will be pro-rated among all views whose weight is greater than 0.

翻译就是:这个weight指明了在LinearLayout中有多少的剩余空间将会被分配到有weight参数的view中。如果一个view不应该被拉伸的话,那么就指定其weight为0,否则额外的像素就会被按比例的分配到所有的weight值大于0的view中。

简单的说就是:android:layout_weight是负责分配屏幕的剩余空间,实现把所有的屏幕空间都利用上

使用代码事例来加深理解

1. 在LinearLayout中简单的显示三个TextView,且这三个TextView都没有设置weight(即默认为0),效果如下图所示:



且这三个TextView的layout_height都是wrap_content.

我们可以看到,这三个TextView并没有填充整个屏幕,只是根据内容填充其高度,还有剩余的空间。

但是如果我们在第二个TextView中添加android:layout_weight=”1”后,其效果就是下面所示:



我们可以看到这三个TextView填充了整个屏幕,且第一个和第三个TextView的高度并没有变,只是第二个TextView的高度填充了其余剩余的空间,所以我们可以得出结论:weight属性负责份分配剩余空间,只要显示的声明了weight属性,那么就不会有剩余空间的存在,肯定被分配给其中的view了。

总结:android系统会先根据你设置的layout_height或者是layout_width来设置子控件的高度或者是宽度(根据android:orientation是vertica还是horizontal),然后如果有layout_weight属性的话,就会把剩下的空间按照weight的比例分配给对应的子控件。

2.深入理解

如图所示:



其对应的代码是:





可以理解为当layout_width为wrap_content时,系统先给两个TextView依据文本内容分配宽度,然后在根据weight值将分配剩余空间,由于这两个TextView中的weight分别是1:1,那么剩余空间(即宽度)将按照1:1的比例分配给这两个TextView即最终的宽度是原来的文本的宽度加上分配的宽度。 这样的设置有一个缺点就是:因为文本内容的不同就很难实现最终的宽度是按照比例分布的。如果想要实现最终的控件的宽度或者是高度是按照比例的分布的,最好忽略掉文本内容带来的影响即将wrap_content该成是0dp。这样做的好处是直接忽略掉了第一步的根据文本内容的空间分布,直接根据weight的值按照比例来分配整个屏幕,不存在剩余空间的概念

最后强调一下,如果我们希望直接依据weight来分配LinearLayout的话,那么子控件的layout_width或者是layout_height要设置为0dp。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  weight