本文是学习这篇博客所得的收获:
Android:Layout_weight的深刻理解
当子控件有layout_weight
属性时, 系统将先按照layout_width
或layout_hight
属性
先把子控件放到父控件中, 之后才解析layout_weight
属性, 然后计算父控件中的剩余空间,
最后按比例分配剩余空间给子控件.
看一下处理layout_weight
时所用到的公式:
1 | # 实际尺寸: 子控件最终展示出来的尺寸 |
当控件的layout_width
以及layout_hight
的值为0
或者wrap_content
时,layout_weight
属性很容易预测最终效果, 它们会按照自己的weight比例
去
分配剩余空间尺寸
.
需要留意的是当控件的layout_width
或layout_hight
的值为fill_parent
的时候,
此时每个子控件在刚被放到父控件中, 且系统还没有解析子控件的layout_weight
时,
父控件就已经没有剩余空间了,
因为此时所有子控件的当前尺寸都等于父控件的尺寸, 且第一个子控件就已经占满了父控件!
那么套用上述公式, 计算子控件最终实际尺寸的过程如下:
下面假设一个父控件中有三个子控件, 其比重为1 : 2 : 3,
则子控件的weight比例
依次为1/6
,2/6
,3/6
剩余空间的计算如下:
1 | 剩余空间 = 父控件尺寸 - 子控件1当前尺寸 - 子控件2当前尺寸 - 子控件3当前尺寸 |
子控件最终实际尺寸的计算如下:
1 | 实际尺寸 = 当前尺寸 + weight比例 * 剩余空间尺寸 |
所以此时子控件3将会消失, 不会显示在屏幕上.