LinearLayout android:layout_weight屬性用法總結(jié)


LinearLayout,很常用的一種布局,當(dāng)在使用這種布局方式時,為了達到較好的屏幕適配效果,可以選擇使用android:layout_weight屬性。當(dāng)為布局中的每個組件指定了大小和權(quán)重之后,我們的android系統(tǒng)如何計算各組件實際所占空間呢?

貼個自己常用的計算方法:

實際大小=指定大小+(屏幕大小-(所有組件大小的和))*權(quán)重比例。

用一屏幕的大小減去所有組件大小的和,得到剩余大小,或理解為可分配空間,該值可為負。然后用我們給某個組件設(shè)定的值,加上其在剩余大小中按比例計算后的值,就是該組件最后的實際大小。

可用空間=屏幕大小-所有組件大小的和,

實際大小=指定大小+可用空間*權(quán)重比例,

所以最后為:

實際大小=指定大小+(屏幕大小-(所有組件大小的和))*權(quán)重比例。

示例:

以android:layout_width為例,驗證計算方式(屏幕寬度:L)

在LinearLayout中放置三個按鈕,分別為Button1,Button2,Button3,android:layout_height="wrap_content"均指定為包裹內(nèi)容,每個Button的android:layout_weight分別為1,2,3。

依據(jù)android:layout_width屬性的設(shè)置,分三種情況:

1. android:layout_width="0dp"時:

組件大小=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"時:

組件大小=L+(L-(L+L+L))*權(quán)重比例,組件大小和權(quán)重成反比。

如果前面組件已經(jīng)占滿屏幕,則剩余組件無法獲得空間,不可見。

各Button占的寬度:

每個Button的layout_width指定為match_parent,即表示每個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不可見。


3. android:layout_width="wrap_content"時:

組件大小=所需大小+(L-各組件所需大小和)*權(quán)重比例,剩余大小即(L-各組件所需大小和)為正,則為正比,否則為反比。

該情況和組件內(nèi)容占用大小有關(guān),所以布局上并不是很明顯的比例關(guān)系,因為比例關(guān)系僅指剩余大小的比例:

? ? 剩余大小為正,即屏幕空間足夠,所占空間和權(quán)重成正比。


? ? 剩余大小為負,即屏幕空間不足,所占空間和權(quán)重成反比,下面的圖可能有點難看,希望想表達的意思到了。


LinearLayout的android:layout_weight屬性用起來很簡單,但是如果想深入理解其原理,就需要參考源代碼了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容