假设:LinearLayout为android:orientation="horizontal", layout_weight属性值分别为1、2、2

第一种情况:每个控件的宽度属性都为android:layout_width="0dp",那么额外的空为(手机的宽度假设为X)X-0-0-0=X,那么根据sdk上所述:
第一个控件的宽度为 0+(1/(1+2+2))X=X/5
第二个控件的宽度为 0+(2/(1+2+2))
X=2X/5
第三个控件的宽度为 0+(2/(1+2+2))*X=2X/5

第二种情况:每个控件的宽度属性都为android:layout_width="match_parent",那么额外的空间就是X-X-X-X=-2X
第一个控件的宽度为 X+(1/(1+2+2))(-2X)=3X/5
第二个控件的宽度为 X+(2/(1+2+2))
(-2X)=X/5
第三个控件的宽度为 X+(2/(1+2+2))*(-2X)=X/5

第三种情况:其中第一个控件宽度属性为android:layout_width="match_parent",其他两个控件宽度为android:layout_width="0dp",额外的空间为X-X-0-0=0
第一个控件的宽度为 X+(1/(1+2+2))0=X
第二个控件的宽度为 0+(2/(1+2+2))
0=0
第三个控件的宽度为 0+(2/(1+2+2))*0=0

最终结论:layout_weight的公式
控件的宽度/高度 = 控件的width/height值+(该控件的weight值/所有控件的weight的和)×额外的空间
额外的空间=手机的宽度/高度-所有控件的宽度/高度

注:如果属性为android:layout_width="wrap_content" 则计算时,总宽/高要减去控件本身占据的宽/高

原文地址:http://blog.sina.com.cn/s/blog_49b2f03a0102zome.html

发表评论

邮箱地址不会被公开。 必填项已用*标注