对Android布局空间权重属性layout_weight的认识

泡在网上的日子 / 文 发表于2012-12-24 20:54 次阅读

"weight"顾名思义是权重的意思,layout_weight用于给一个线性布局中的诸多视图的重要程度赋值。所有的视图都有一个layout_weight值,默认为0,意思是需要显示多大的视图就占据多大的屏幕空间。


若赋一个高于零的值,则将父视图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight值以及该值在当前屏幕布局的整体layout_weight值和在其它视图屏幕布局的layout_weight值中所占的比率而定。举个例子:比如说我们在 水平方向上有一个文本标签和两个文本编辑元素。该文本标签并无指定layout_weight值,所以它将占据需要提供的最少空间。如果两个文本编辑元素每一个的layout_weight值都设置为1,则两者平分在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。如果两个文本编辑元素其中第一个的layout_weight值设置为1,而第二个的设置为2,则剩余空间的三分之二分给第一个,三分之一分给第二个(数值越小,重要度越高)。


虽然是根据比例来分配剩余的空间,但是如果layout_weight在某些情况下取值不当,可能会出现子视图不能填满父视图的情况,典型的案例就是父视图背景为白色,垂直布局,子视图subview1和subview2的layout_weight分别为6、0.8,背景颜色分别为不同程度的灰色(便于区分),subview1在subview2的上方,你会发现在subview2的下方有很细的白色缝隙。


为什么会造成这样的情况,?


我们知道6比0.8其实就是15比2,当我将子视图subview1和subview2的layout_weight分别重新设置为15、2的时候,缝隙没有了。


似乎weight的值不能为小数,我没有验证过,但是因为我曾遇到过两次这样的情况,我建议不要将layout_weight设为小数,且当layout_weight引起布局异常的时候,换成同样的比值的不同数值试试。


我认为这是android的一个bug,很明显layout_weight的底层实现里面,在某些情况下会造成值的丢弃。而google官方似乎并没有做说明。

收藏 赞 (0) 踩 (0)
上一篇:Android Activity 对话框(Dialog)样式
有些时候需要把一个activity当成一个dialog来使用,或者说需要一个dialog里面放一些布局或者其它控件,这时候就需要一个Dialog样式的Activity了。 Activity一般给人的印象是要占满全屏的。伪装成Dialog的效果是只显示在部分屏幕中。 需要在Manifest里面配置a
下一篇:Android绘图:绘制直线的 drawLine方法
【功能说明】该方法用于在画布上绘制直线,通过指定直线的两个端点坐标来绘制。该方法只能绘制单条直线;如果需要同时绘制多条直线,则可以使用drawLines方法。 【基本语法】public void drawLine (float startX, float startY, float stopX, float stopY, P