android:layout_weight屬性 字母上的意思是權重,這常常讓人誤解為整個空間的劃分權重之比。但其實它指的僅僅是剩餘空間劃分的權重(比如剩餘寬度、剩餘高度)。而所謂的剩餘空間當然就是指的那些沒有元件占用的空間了,相當于是總寬度/總高度 - 所有元件的寬度之和/高度之和。
下面舉個例子詳細說明一下。
我們在LinearLayout 中放置兩個元件(按鈕或者别的什麼) ,兩個子元件的 android:layout_weight屬性設定成1,它告訴LinearLayout如何布置安排子元件。我們已經為兩個元件設定了同樣的值,但這并不意味着它們在螢幕上占據同樣的寬度。在決定子元件視圖的寬度時,LinearLayout使用的是layout_width與layout_weight參數的混合值。
LinearLayout是分兩個步驟來設定視圖寬度的。
第一步,LinearLayout檢視layout_width屬性值(豎直方位則檢視layout_height屬性值)。如果元件的layout_width屬性值都設定為wrap_content,是以它們獲得的空間大小僅夠繪制自身。(在預覽界面,很難看出layout_weight是如何工作的,因為元件顯示大小不一定就是實際顯示的大小。)
第二步,LinearLayout依據layout_weight屬性值進行額外的空間配置設定,在布局中,如果兩個元件擁有相同的layout_weight屬性值,是以它們均分了同樣大小的額外空間。相當于:元件總寬度=元件layout_width + 剩餘寬度/2。若将元件1的weight值設定為2,那麼它将獲得2/3的額外空間,元件2則獲得剩餘的1/3。
weight設定值也可以是浮點數。對于weight設定值,開發者有着各自的使用習慣。在這裡,我們使用的是一種cocktail recipe式的weight設定風格。另一種常見的設定方式是各元件屬性值加起來等于1.0或100。這樣,這個例子中按鈕元件的weight值則應該是0.66或66。
如果想讓LinearLayout配置設定完全相同的寬度給各自的視圖,該如何處理呢?很簡單,隻需設定各元件的layout_width 屬性值為0dp 以避開第一步的空間配置設定就可以了。這樣
LinearLayout就會隻考慮使用layout_weight屬性值來完成所需的空間配置設定。那就1:1 每個元件各分一半了。