假设:
LinearLayout为android:orientation="horizontal",
LinearLayout中包含三个控件
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" 则计算时,总宽/高要减去控件本身占据的宽/高