分析weight分配原则
前提条件:AB控件,水平排列,控件layotu_weight属性默认值为0
情况1
控件A | 控件B | 效果 |
---|
wrap_content/weight = 0 | wrap_content/weight = 0 | AB控件以内容宽度作为自身宽度 |
wrap_content/weight = 1 | wrap_content/weight = 1 | AB控件先以内容宽度作为自身宽度,再将所在行剩余空间按照权重值加给AB控件 |
情况2
控件A | 控件B | 效果 |
---|
50dp/weight = 0 | 50dp/weight = 0 | AB控件以指定宽度作为自身宽度 |
50dp/weight = 1 | 50dp/weight = 1 | AB控件以指定宽度作为自身宽度,再将所在行剩余空间按照权重值加给AB控件 |
100dp/weight = 0 | 100dp/weight = 0 | AB控件以指定宽度作为自身宽度 |
100dp/weight = 2 | 100dp/weight = 1 | AB控件以指定宽度作为自身宽度,再将所在行剩余空间按照权重值加给AB控件 |
情况3
控件A | 控件B | 效果 |
---|
match_parent/weight = 1 | match_parent/weight = 1 | AB控件,先以width属性分配空间,在按照weight分配空间,看似达到了分配总体空间的大小 |
match_parent/weight = 2 | match_parent/weight = 1 | 在AB属性weight各为1的基础上,A的权重越大,所占空间越少 |
match_parent/weight = 10 | match_parent/weight = 1 | 在AB属性weight各为1的基础上,A的权重越大,所占空间越少 |
情况4
控件A | 控件B | 效果 |
---|
wrap_content/weight = 1 | wrap_content/weight = 1 | AB控件,按照权重比例分配总体空间 |
wrap_content/weight = 8 | match_parent/weight = 2 | AB空间,按照权重比例分配总体空间,权重值越大,所占空间越多 |
情况5
控件A | 控件B | 效果 |
---|
0dp/weight = 1 | 0dp/weight = 1 | 不考虑AB控件自身宽度,按照权重比例分配总体空间,将值加到AB控件上 |
结论
SO,可以总结出3条:
- 当layout_width属性值为0时,控件宽度完全按照权重值分配,然后加到控件上,当然,总体不能超过行宽度.
- 当layout_width属性值为非0或warp_content时,控件先由自身宽度,再将剩余空间按照权重值分配,然后加到控件上,当然,总体不能超过行宽度.
- 当layout_width属性值位match_parent时,控件按照排列顺序优先充满行宽度,然后按照权重值,值越大,所占空间越小.