以垂直方向上按权重分配为例,一般我们使用weight这个属性时,但是当控件的高度不同时其呈现的样式也是有所不同的。

这与权重的计算方式决定的,实际上,对于任何不同属性的设置,权重的计算方式是一样的。

那就是,用在分配方向上的屏幕的总长度(宽度)- 该方向上空间的原有长度(宽度) = 剩余的长度(宽度);

然后在将剩余的长度(宽度)按照权重的比例进行分配;



一、将控件的高度设置为0dp时(android:layout_height="0dp")

在垂直方向上,控件所占的空间则完全按照比例权重的大小来分配;

控件垂直方向上的高度  = (垂直高度 - 0dp)/ 权重总数 * 控件权重

如果每一个空间的权重都为1,则能很好的实现空间的平均分配;


二、将控件的高度设置为wep_content时(android:layout_height="wrap_content")

控件垂直方向上的高度  = ((垂直高度 - 各个控件wrap_content的默认高度和)/ 权重总数 * 控件权重)+ 该控件wrap_content的默认高度;


三、将控件的高度设置为匹配父容器时(android:layout_height="match_parent")

控件垂直方向上的高度  = ((垂直高度 - 各个控件match_parent的默认高度和)/ 权重总数 * 控件权重)+ 该控件wrap_content的默认高度;

假设屏幕高度为100dp,有两个屏幕高度设置为match_parent,其中一个权重为1,一个权重为3:

则权重为1的控件所占的高度为:((100dp -100dp*2) / (3+1)*1 + 100dp = 75dp;此时其所占的空间比重为3;

则权重为3的控件所占的高度为:((100dp -100dp*2) / (3+1)*3 + 100dp = 25dp;此时其所占的空间比重为1;

此时在垂直方向上,控件所占的空间就会按照权重的反比进行分配,也就是说,原来分配权重大的占有的比例小,而原来分配权重小的反而占有比例大;


除此之外,权重的分配在在其它控件完成控件分配之后进行的,也就是说,如果没有设置权重的控件和设置权重的控件的同一个父布局中,

要先完成没有设置权重的控件的空间分配,之后剩余的空间作为权重分配的总空间;