1. 程式人生 > >layout_weight及常見屬性解析

layout_weight及常見屬性解析

layout_weight在使用中遇到的問題

1.在一個橫向的linearLayout中有三個TextView,layout_width都是0dp,layout_weight分別是1,2,3,內容分別是111111111111111,2,3執行發現,一長串的文字和第2,3個textView的底部是不對齊的,原因是因為TextView在LinearLayout中會參考父類的baseline,如何解決呢?
需要將textview所在的linearlayout的baselineAligned = “false”

2.在上述佈局的基礎上,修改第一個textview的layout_width屬性為wrap_content,執行發現三個textView並沒有按照layout_weight的比例展示出來。
說明:LinearLayout中的layout_weight屬性,首先按照控制元件宣告的尺寸進行分配,然後再將剩下的尺寸按weight(1:2:3)分配。

3.修改第一個的佈局中的三個TextView的layout_width均為match_parent,然後將layout_weight修改成1:2:2,執行發現完全不是想要的結果。
這裡還利用2中的說明:首先按照控制元件宣告的尺寸進行分配,然後再將剩下的尺寸按weight分配。
假設外層LinearLayout的width為480
那麼剩餘的尺寸是:480-480 x 3 = -480 x 2;
三個TextView佔的比例分別是1/(1+2+2)、2/(1+2+2)、2/(1+2+2) 即1/5、2/5 、2/5
TextView 1:480+(-480 x 2)*(1/5)= 480 x(3/5)
TextView 2、3:480 +(-480 x 2)(2/5)= 480 x(1/5)
結論:控制元件寬度+父控制元件剩餘寬度 x 比例 (父控制元件剩餘寬度是可以小於0的)

4.在linearlayout中只有一個TextView,並且想使這個textView佔據螢幕的一半,那麼可以在Linearlayout中宣告屬性 android:weightSum = 2,將TextView的width = 0dp,weight = 1;就可以實現效果。

5.TextView的layout_width,layout_height,layout_weight等以layout_開頭的屬性都是交給其父容器設定的。不帶layout_開頭的屬性,是控制元件本身的屬性。所以layout_gravity是指父佈局控制子view的佈局顯示,而view本身的gravity是指view控制其自身內容的顯示。