子佈局 無論是 依賴自己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 先計算剩餘尺寸 依據剩餘尺寸 計算出有權重屬性組件尺寸
計算公式 組件尺寸 = 組件原有尺寸 + 剩餘尺寸*權重比
計算公式 組件尺寸 = 組件原有尺寸 + (現有組件的所有尺寸總和 — 屏幕尺寸 )*權重比
以下爲轉載
設屏幕寬度爲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就可以理解爲佔比了!