关于 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就可以理解为占比了!

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