对Android自定义控件中的onMeasure方法的理解

来源:互联网 发布:mac雷蛇驱动安装失败 编辑:程序博客网 时间:2024/05/21 17:02

这两天准备写一个自定义的Button,可以实现点击监控并监听的,但是发现自己太嫩了。在onMeasure()停了好久,才发现自己最开始的理解就是错误了的。

我们都知道,一个自定义view主要通过onMeasure,onLayout,onDraw来决定,所以现在我们救助要看看onMeasure。而对于onMeasure中的细节,我想网上的大神贴太多,所以我也不班门弄斧了。

现在我就主要来说我遇到的问题吧,我们都知道在onMeasure中有两个参数widthMeasureSpec, heightMeasureSpec;而这两个参数就是封装了Mode和Size。其中Mode中有三中类型:

MeasureSpec.EXACTLY:父视图希望子视图的大小应该是specSize中指定的。

MeasureSpec.AT_MOST:子视图的大小最多是specSize中指定的值,也就是说不建议子视图的大小超过specSize中给定的值。

MeasureSpec.UNSPECIFIED:我们可以随意指定视图的大小。

我的问题就是出现在这里,开始我以为“父视图希望子视图的大小应该是specSize中指定的”是指父视图如果是match_parent或者一个具体的值,然而通过实验,我发现是子视图的width所决定的。

简单的说,Mode是MeasureSpec.EXACTLY的话,子视图就可以决定自己的大小。

0 0