天天看點

關于weight屬性使用的一些細節

之前被這個屬性困擾過好久,今天一個偶然的機會,終于把這個搞清楚了,現在與大家分享一下。

假設我們要在一個LinearLayout布局中顯示兩個按鈕,button1和button2,button2的寬度是button1的二倍,正常情況下使用weight應該是這樣的:

注意兩個button的寬都是0dp

效果圖:

關于weight屬性使用的一些細節

可是如果換一種方式:

兩個button的寬度都是match_parent,情況立馬發生轉變:

關于weight屬性使用的一些細節

我以前就在這裡不知道糾結了多少回,那麼我們到底該怎麼了解weight這個屬性呢?

設定了weight屬性的View的寬度等于原有寬度加上剩餘空間的占比,其中剩餘空間是指螢幕寬度相對于控件總寬度剩餘的空間大小。

以第一種情況為例

假設螢幕寬度為L,第一個button原有寬度是0dp,那麼該button的寬度為0+(L-0)×1/3 = (1/3)L;

其中(L-0)中,L表示螢幕寬度,0表示兩個控件的總寬度

以第二種情況為例

假設螢幕寬度為L,因為兩個都是match_parent,是以總寬度是2L,那麼對于第一個button而言,它的寬度為:L+(L-2L)×1/3 = (2/3)L

其中(L-2L)中,L表示螢幕寬度,2L表示兩個控件的總寬度

總結:建議大家在使用weight屬性的過程中把相應的寬或者高設定為0dp,這也是Google推薦的做法。水準排列的話寬設定為0dp,豎直排列的話高設定為0dp.