android:layout_weight的一點理解

這是Stack Overflow中關於layout_weight中的一些解釋,其實有的時候感覺這個問答社區裏的回答還是蠻直白蠻,蠻好理解的。推薦大家可以多利用利用,還可以鍛鍊英文哦。

官方文檔對weight的解釋是:

Indicates how much of the extra space in the LinearLayout will be allocated to the view associated with these LayoutParams. Specify 0 if the view should not be stretched. Otherwise the extra pixels will be pro-rated among all views whose weight is greater than 0.

翻譯就是:這個weight指明瞭在LinearLayout中有多少的剩餘空間將會被分配到有weight參數的view中。如果一個view不應該被拉伸的話,那麼就指定其weight爲0,否則額外的像素就會被按比例的分配到所有的weight值大於0的view中。

簡單的說就是:android:layout_weight是負責分配屏幕的剩餘空間,實現把所有的屏幕空間都利用上

使用代碼事例來加深理解

1. 在LinearLayout中簡單的顯示三個TextView,且這三個TextView都沒有設置weight(即默認爲0),效果如下圖所示:

這裏寫圖片描述

且這三個TextView的layout_height都是wrap_content.
我們可以看到,這三個TextView並沒有填充整個屏幕,只是根據內容填充其高度,還有剩餘的空間。
但是如果我們在第二個TextView中添加android:layout_weight=”1”後,其效果就是下面所示:

這裏寫圖片描述

我們可以看到這三個TextView填充了整個屏幕,且第一個和第三個TextView的高度並沒有變,只是第二個TextView的高度填充了其餘剩餘的空間,所以我們可以得出結論:weight屬性負責份分配剩餘空間,只要顯示的聲明瞭weight屬性,那麼就不會有剩餘空間的存在,肯定被分配給其中的view了。

總結:android系統會先根據你設置的layout_height或者是layout_width來設置子控件的高度或者是寬度(根據android:orientation是vertica還是horizontal),然後如果有layout_weight屬性的話,就會把剩下的空間按照weight的比例分配給對應的子控件。

2.深入理解
如圖所示:

這裏寫圖片描述

其對應的代碼是:
這裏寫圖片描述

這裏寫圖片描述

可以理解爲當layout_width爲wrap_content時,系統先給兩個TextView依據文本內容分配寬度,然後在根據weight值將分配剩餘空間,由於這兩個TextView中的weight分別是1:1,那麼剩餘空間(即寬度)將按照1:1的比例分配給這兩個TextView即最終的寬度是原來的文本的寬度加上分配的寬度。 這樣的設置有一個缺點就是:因爲文本內容的不同就很難實現最終的寬度是按照比例分佈的。如果想要實現最終的控件的寬度或者是高度是按照比例的分佈的,最好忽略掉文本內容帶來的影響即將wrap_content該成是0dp。這樣做的好處是直接忽略掉了第一步的根據文本內容的空間分佈,直接根據weight的值按照比例來分配整個屏幕,不存在剩餘空間的概念

最後強調一下,如果我們希望直接依據weight來分配LinearLayout的話,那麼子控件的layout_width或者是layout_height要設置爲0dp。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章