Android-MeasureSpec

作者: A代码搬运工 | 来源:发表于2019-05-31 17:00 被阅读4次

MeasureSpec官方介绍如下:

MeasureSpec

MeasureSpec是由一个32位int值来表示的.其中该int值对应的二进制的高二位代表SpecMode,低30位代表SpecSize.

MeasureSpec源码看起来非常简单,里面的方法不多,就那么几个.

MeasureSpec

1. UNSPECIFIED

父容器不对子View有任何限制,子View要多大给多大,这样一般我们不会碰到(ScrollView)

2.EXACTLY

精确模式 View的大小已经确定,为SpecSize指定的值

3.AT_MOST

表示子View的大小不确定,指定了该子View最大能为多少,子View可以在指定的范围内设定自己的大小

        例如xml中FrameLayout定义layout_width和layout_height是match_parent,那么根据MeasureSpece.getMode(measureSpec)获取的mode就是EXACTLY模式,如果layout_width设置的是wrap_content,width获取的mode就是AT_MOST模式.如果mode是EXACTLY模式,根据MeasureSpec.getSize(measureSpec)的size就是个确定值。

        View的测量是一层一层去进行绘制的.首先会绘制ViewGroup,然后由ViewGroup去绘制子View.从View的measure方法可以看到传入了widthMeasureSpec和heightMeasureSpec.也就是说父ViewGroup去测量子View的时候,已经知道了子View的测量规格,也就是子View的测试模式和测试大小.子View的MeasureSpec是由父容器和子View的布局参数决定的。最终是通过setMeasuredDimension(int,int)来设置实际的大小.

        文章主要内容摘自:https://www.jianshu.com/p/c1f8df587985

相关文章

网友评论

    本文标题:Android-MeasureSpec

    本文链接:https://www.haomeiwen.com/subject/hxrgtctx.html