view的三种测量模式
我们来做一个自定义控件
来个自定义控件继承LinearLayout
public class FlowLayout extends LinearLayout {
public FlowLayout(Context context) {
super(context);
}
public FlowLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
}
接下来就要说说3种测量模式了
测量模式:
1.MeasureSpec.EXACTLY:精确的测量模式,100dp,match_parent
2.MeasureSpec.AT_MOST:至多的测量模式,不超过,wrap_content
3.MeasureSpec.UNSPECIFIED:未定义的测量模式
onMeasure里的两个参数
1.widthMeasureSpec
2.heightMeasureSpec
是32位数,前两位是测量模式,后30位是具体的大小
获取测量模式
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);