自定义View之onMeasure
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义View之onMeasure相关的知识,希望对你有一定的参考价值。
参考技术AonMeasure设置自身的大小,onLayout设置子控件的位置。
为了更好的理解onMeasure()的作用,可以先从一个简单的Sample入手。首先,我们写一个自定义View,直接调用系统默认的onMeasure函数,看看会是怎样的现象:
1、父控件使用match_parent,CustomView的layout_width、layout_height为100dp,如图所示:
看到这个结果后我会有如下几个疑问:
解释如下:
问题又来了这个模式到底是个什么东西?如下图
父控件是根据layout_height、layout_width来判断对子控件的约束条件。
当父控件填充子控件的时候会主动调用onMeasure方法,并根据子控件的约束条件计算得出widthMeasureSpec,heightMeasureSpec。注意super关键字,虽然我们在自定义的控件里面什么也没实现,但是我们继承的View类里面有实现啊!
2、 父控件使用match_parent,CustomView使用match_parent
结果如下图,很明显CustomView将LinearLayout填充满了,因为LinearLayout背景色时蓝色。
3、父控件使用match_parent,CustomView使用wrap_content
结果如下图,CustomView依然将LinearLayout填充满了。
以上是关于自定义View之onMeasure的主要内容,如果未能解决你的问题,请参考以下文章
Andoid自定义View的OnMeasure详解和自定义属性
android 自定义View onMeasure中 super.onMeasure 和 setMeasuredDimension