Android布局基础知识之wrap_content与match_parent的区别,(和配合使用layout_weight的不同)
一、定义
match_parent:表示让当前控件的大小和父布局的大小一样,即由父布局来决定当前控件的大小。
wrap_content:表示让当前控件的大小刚好能够包含里面的内容,即由控件内容决定当前控件的大小。
二、配合layout_weight的不同
layout_weight:表示线性分割原本应有长度的权重,要和wrap_content和match_parent配合使用。
layout_weight的计算方式:LinearLayout布局中含有weight的子控件时,LinearLayout会measure两次
设屏幕宽度为X,子控件1为x1,子控件2为x2
第一次测量宽度:x1=X, x2=X ,total_width为2X; (因为用了weight,所以linearLayout每次measure child时不考虑前一个已经占用的大小)
第二次计算delta(偏差):delta=X-total_width=-X, 然后会将x1的宽度设为 X+delta1/3=0.66X, x2的宽度为 X+delta*2/3=0.33X。
试着理解这句话!! 1、layout_width="match_parent"时, 控件的宽度为整个父布局宽度,即match_parent 剩余空间宽度 = 父布局宽度 - 总权重*控件宽度(这里为父布局宽度) 分析:结果为负值,因此比例为反比。
layout_width="wrap_content"时, 控件的宽度为内容宽度,而wrap_content表示为0dp 剩余空间宽度 = 父布局宽度 - 总权重*控件宽度(这里为0dp) 分析:结果为正值,因此比例为正比。
通用计算长度公式:长度=控件长度+权重比例*剩余空间大小
Google官方推荐,当使用weight属性时,将width设为0dp即可,效果跟设成wrap_content是一样的。这样weight就可以理解为占比了!
|