Android — layout_weight 解析
前言
- LinerLayout可以为其包含的控件指定填充权值layout_weight。这样就允许其包含的控件可以填充屏幕上的剩余控件,避免了所有控件挤成一堆的情况,剩余的空间会按这些控件的权值比例分配屏幕。
- 默认情况下,weight的值为0,表示按控件的实际大小显示;如果weight值设置高于0,剩余空间会按控件的weight值所占所有控件weight的比例分配给该控件。比如有两个控件,一个weight值为1,另一个为2,则剩余空间会把1/3的部分给控件一,剩下的2/3分配给控件二,也就是说权值越大,重要度越高。
- 如果LinerLayout包含子LinerLayout,子LinerLayout之间的权值越大,重要程度越小。如果有LinerLayout A包含LinerLayout C D,C权值为1,D权值为2,则屏幕的2/3会分配给C,1/3分给D。在LinerLayout嵌套的情况下,子LinerLayout必须要设置权值,否则默认情况下是未设置权值的子LinerLayout占据整个屏幕。
下面我们来测试一下,并讲解一个通用的计算方法。
测试
这个就比较好理解了,按权重划分,当把子控件android:layout_width=”match_parent”时,一下:
那么是怎么计算的呢?比较容易理解的解法是这样的滴:
既然三个TextView都是充满父类容器,那么剩下的空间就是1(match_parent)-3(match_parent)=-2(match_parent),然后剩下的空间按照权值分配,所以第一个TextView所占的空间为:1(match_parent)+(-2(match_parent)*1/6)=2/3(match_parent),第二个TextView所占的空间为:1(match_parent)+(-2(match_parent)2/6)=1/3(match_parent),第三个TextView也就不占空间了。
当然你也可以试试把LinearLaylout的android:orientation=”vertical”,也是一样的算法,屡试不爽。