關於 android 權重 weight在佈局中的理解和使用

1 父佈局 wrap_content 依賴子佈局時  
子佈局 無論是 依賴自己wrap_content、還是match_parent依賴父佈局、還是爲0使用weight
子佈局尺寸 都是 自己原有尺寸。

父     match_parent  match_parent   wrap_content  wrap_content
子     match_parent  wrap_content   wrap_content  match_parent 
結果   match_parent  wrap_content   wrap_content  wrap_content  

當且僅當父子 佈局都爲 match_parent  的時候 自佈局纔會變大。剩下的組合關係 都是子佈局原有尺寸。
子佈局不變大 父佈局能否變大都沒有用 子佈局能變大父佈局不變大也沒用。


父佈局爲 依賴自己wrap_content  時 子佈局只能也是依賴自己原有尺寸 此時 權重不起作用!
當且僅當父佈局爲matchparent 時 子佈局纔有可能擴大 權重才起作用。

仔細理解權重指的是   剩餘量的佔比!
###############
0  父佈局設置 wapcontent時子佈局權重不起作用


1  measure 兩次 設置權重屬性的組件 和不設置權重的組件 同時計算
   第一次measure   所有組件的原有高度尺寸
   第二次 measure  先計算剩餘尺寸 依據剩餘尺寸 計算出有權重屬性組件尺寸

        計算公式 組件尺寸 = 組件原有尺寸 +  剩餘尺寸*權重比


3 剩餘尺寸:   是指 現有組件的所有尺寸總和 — 屏幕尺寸 <結果極有可能爲負數>
   計算公式 組件尺寸 = 組件原有尺寸 + (現有組件的所有尺寸總和 — 屏幕尺寸 )*權重比

 
以下爲轉載
設屏幕寬度爲L,在兩個view的寬度都爲match_parent的情況下,原有寬度爲L,兩個的View的寬度都爲L,
那麼剩餘寬度爲L-(L+L) = -L, 左邊的View佔比三分之一,所以總寬度是L+(-L)*1/3 = (2/3)L.
事實上默認的View的weight這個值爲0,一旦設置了這個值,那麼所在view在繪製的時候執行onMeasure兩次的原因就在這。

Google官方推薦,當使用weight屬性時,將width設爲0dip即可,效果跟設成wrap_content是一樣的。
這樣weight就可以理解爲佔比了!

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