一、MeasureSpec
获取测量大小:MeasureSpec.getSize(measureSpec)
获取测量模式:MeasureSpec.getMode(measureSpec)
SpecMode:
- UNSPECIFIED:未指定,没有限制
- EXACTLY:精确模式。对应于LayoutParams中的match_parent和具体数值两种模式;
- AT_MOST:最大模式。对应于LayoutParams中的wrap_content,View的大小不能大于这个值;
普通View的MeasureSpec和父容器的MeasureSpec和自身的LayoutParams,以及View的margin和padding有关
View采用固定宽/高时,无论父容器是什么模式,View都是精确模式,大小遵循LayoutParams的值;
当View采用match_parent时,如果父容器是精确模式,View是精确模式,大小是父容器剩余空间大小,如果父容器是最大模式,View是最大模式,大小不超过父容器剩余空间大小;
当View采用wrap_content时,无论父容器是精确模式还是最大模式,View都是最大模式,大小不超过父容器剩余空间大小;
二、自定义View的分类
1.继承View,重写onMeasure和onDraw方法
2.继承特定的View
3.继承ViewGroup,重写onMeasure和onDraw方法
4.继承特定的ViewGroup
Android自定义控件
最新推荐文章于 2022-01-21 16:14:36 发布