Android Measure测量

1、我们都知道自定义view经常要重新protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法,我们都知道这个方法就是来测试view的大小的,那你真的了解widthMeasureSpec,heightMeasureSpec参数的意义吗?反正我是看了好多材料才了解,以下是我的看法 .

MeasureSpec 是android中父view传递给子view的用来描述对子 view布局需求的数据类型,也就是说父布局会根据父布局控件以及当前view的大小以及变化的尺度分装在这个类里,而子view的measure()方法拿到这个数值,则会根据这个数值对自身进行测量。改值包含父布局希望你显示的大小size,以及父布局希望你显示的模式,(请注意,这个值是根据父布局的layout_width/height,以及自定义view的layout_width,height得到出来的希望你这个自定义view要显示的大小和模式, 这个我查了好久以及看了源码理解了几遍才明白)

MeasureSpec值有以下几个: 

1.UNSPECIFIED :父试图不对子试图有任何的约束,它可以达到这几所需要的尺寸大小,例如:ListView,ScrollView等,一般在我们在自定义控件中不会用到这个测量模式的。

2.EXACTLY:父视图指定了确切的大小,无论子视图指定多大的尺寸,子视图必须在父视图指定的大小范围内,对应的属性为match_parent或者具体的值,父控件可以通过MeasureSpec.getSize(measureSpec)直接得到子控件的尺寸。(当然自定义view你可以不用父容器建议你用的大小,你完成可以重写,只是也没多少意义,想象下,我规定你只能使用500px,你自己使用了600px,本质上显示出来最多也只是500,还是在这区域内,但是实际上拿到的view的宽是600,及显示还是500(还是在父容器控制内,逃不出五指山,因此你当遇到EXACTLY, 你 也没必要在定义大小了,挣扎啥呢。。。)

3.AT_MOST:父控件为子控件指定一个最大尺寸,子视图必须确保自己的孩子视图可以适应在该尺寸范围内,对应的属性为wrap_content,这种模式下父控件无法测量子view的大小,只能由子控件自己根据需求去计算自己的尺寸,这种模式就是我们自定义视图需要实现测量逻辑的情况。这就是大部分要重写onMeasure处理的过程,在wrap_content模式下,自定义view要显示多大,还是说显示父容器显示的大小,这个由你控制)

总结: OnMeasure(int widthMeasureSpec, int heightMeasureSpec)该方法就是我们自定义控件中测量逻辑的方法,该方法中的参数是父view传递给子view测量width与height大小的要求。在我们自定义视图中,要做的就是根据widthMeasureSpec与heightMeasureSpec进行对view宽高的一个测量,不同的测量模式,测量的逻辑是不同的。

setMeasuredDimension()是对测量后的值的一个回传,我们只需要在onMeasure()中调用这方法把测量后的值传递进去,这样测量的任务就算结束了

学习文章: https://www.jianshu.com/p/f951d9089b27

                   https://www.jb51.net/article/122887.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android 自定义View】 [TOC] 自定义View基础 接触到一个类,你不太了解他,如果贸然翻阅源码只...
    Rtia阅读 4,014评论 1 14
  • 在Android开发中,自定义View可以说是从业人员从初级到中级的一个标志性过渡,不论你是老鸟还是新人,不论你是...
    贾亦真亦贾阅读 5,068评论 7 26
  • 参考:Android开发艺术探索一书 MeasureSpec## MeasureSpec 由view自身的layo...
    zhaoyubetter阅读 793评论 0 0
  • View的绘制和事件处理是两个重要的主题,上一篇《图解 Android事件分发机制》已经把事件的分发机制讲得比较详...
    Kelin阅读 120,731评论 100 845
  • 仲秋时节,北方的一个小镇飘摇在朦胧的细雨中。小镇中央之地,一只随风舞动的暗红的旗幡格外显眼。定睛细看,旗幡上...
    方君阅读 377评论 1 1