以垂直方向上按权重分配为例,一般我们使用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;
此时在垂直方向上,控件所占的空间就会按照权重的反比进行分配,也就是说,原来分配权重大的占有的比例小,而原来分配权重小的反而占有比例大;
除此之外,权重的分配在在其它控件完成控件分配之后进行的,也就是说,如果没有设置权重的控件和设置权重的控件的同一个父布局中,
要先完成没有设置权重的控件的空间分配,之后剩余的空间作为权重分配的总空间;