自定义View之onMeasure

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义View之onMeasure相关的知识,希望对你有一定的参考价值。

参考技术A

onMeasure设置自身的大小,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的主要内容,如果未能解决你的问题,请参考以下文章

转载自定义View学习笔记之详解onMeasure

自定义View之onMeasure

Android 自定义View之Layout过程

Andoid自定义View的OnMeasure详解和自定义属性

android 自定义View onMeasure中 super.onMeasure 和 setMeasuredDimension

Android开发之自定义控件---onMeasure详解