LinearLayout愤诱,很常用的一種布局云头,當(dāng)在使用這種布局方式時(shí),為了達(dá)到較好的屏幕適配效果淫半,可以選擇使用android:layout_weight屬性溃槐。當(dāng)為布局中的每個(gè)組件指定了大小和權(quán)重之后,我們的android系統(tǒng)如何計(jì)算各組件實(shí)際所占空間呢科吭?
貼個(gè)自己常用的計(jì)算方法:
實(shí)際大小=指定大小+(屏幕大小-(所有組件大小的和))*權(quán)重比例竿痰。
用一屏幕的大小減去所有組件大小的和脆粥,得到剩余大小,或理解為可分配空間影涉,該值可為負(fù)变隔。然后用我們給某個(gè)組件設(shè)定的值,加上其在剩余大小中按比例計(jì)算后的值蟹倾,就是該組件最后的實(shí)際大小匣缘。
可用空間=屏幕大小-所有組件大小的和,
實(shí)際大小=指定大小+可用空間*權(quán)重比例鲜棠,
所以最后為:
實(shí)際大小=指定大小+(屏幕大小-(所有組件大小的和))*權(quán)重比例肌厨。
示例:
以android:layout_width為例,驗(yàn)證計(jì)算方式(屏幕寬度:L)
在LinearLayout中放置三個(gè)按鈕豁陆,分別為Button1柑爸,Button2,Button3盒音,android:layout_height="wrap_content"均指定為包裹內(nèi)容表鳍,每個(gè)Button的android:layout_weight分別為1,2祥诽,3譬圣。
依據(jù)android:layout_width屬性的設(shè)置,分三種情況:
1. android:layout_width="0dp"時(shí):
組件大小=0+(L-(0+0+0))*權(quán)重比例雄坪,組件大小和權(quán)重成正比厘熟。
各Button占的寬度:
Button1=0+(L-(0+0+0))*(1/6),為1/6L维哈;
Button2=0+(L-(0+0+0))*(2/6)绳姨,為2/6L;
Button3=0+(L-(0+0+0))*(3/6)阔挠,為3/6L飘庄。
所以Button1:Button2:Button3 = 1:2:3。
2. android:layout_width="match_parent"時(shí):
組件大小=L+(L-(L+L+L))*權(quán)重比例谒亦,組件大小和權(quán)重成反比竭宰。
如果前面組件已經(jīng)占滿屏幕,則剩余組件無(wú)法獲得空間份招,不可見(jiàn)切揭。
各Button占的寬度:
每個(gè)Button的layout_width指定為match_parent,即表示每個(gè)Button指定大小為父組件寬度锁摔,即L廓旬。
Button1=L+(L-(L+L+L))*(1/6),為4/6L;
Button2=L+(L-(L+L+L))*(2/6)孕豹,為2/6L涩盾;
Button3=L+L(L-(L+L+L))*(3/6),為0励背。
所以Button1:Button2=2:1春霍,Button3不可見(jiàn)。
3. android:layout_width="wrap_content"時(shí):
組件大小=所需大小+(L-各組件所需大小和)*權(quán)重比例叶眉,剩余大小即(L-各組件所需大小和)為正址儒,則為正比,否則為反比衅疙。
該情況和組件內(nèi)容占用大小有關(guān)莲趣,所以布局上并不是很明顯的比例關(guān)系,因?yàn)楸壤P(guān)系僅指剩余大小的比例:
? ? 剩余大小為正饱溢,即屏幕空間足夠喧伞,所占空間和權(quán)重成正比。
? ? 剩余大小為負(fù)绩郎,即屏幕空間不足潘鲫,所占空間和權(quán)重成反比,下面的圖可能有點(diǎn)難看嗽上,希望想表達(dá)的意思到了次舌。
LinearLayout的android:layout_weight屬性用起來(lái)很簡(jiǎn)單熄攘,但是如果想深入理解其原理兽愤,就需要參考源代碼了。