美文网首页
(转)自定义控件MeasureSpecs与measure的理解

(转)自定义控件MeasureSpecs与measure的理解

作者: 鲨鱼哥哥 | 来源:发表于2018-08-10 10:20 被阅读0次

    MeasureSpace
    是android中父view传递给子view的用来描述对子 view布局需求的数据类型,也就是说父布局把它希view的大小以及变化的尺度分装在这个类里,而子view的measure()方法拿到这个数值,则会根据这个数值对自身进行测量。

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

    2.EXACTLY:父视图指定了确切的大小,无论子视图指定多大的尺寸,子视图必须在父视图指定的大小范围内,对应的属性为match_parent或者具体的值,父控件可以通过MeasureSpec.getSize(measureSpec)直接得到子控件的尺寸。

    3.AT_MOST:父控件为子控件指定一个最大尺寸,子视图必须确保自己的孩子视图可以适应在该尺寸范围内,对应的属性为wrap_content,这种模式下父控件无法测量子view的大小,只能由子控件自己根据需求去计算自己的尺寸,这种模式就是我们自定义视图需要实现测量逻辑的情况。

    //这个是由我们给出的尺寸大小和模式生成一个包含这两个信息的int变量,这里这个模式这个参数,传三个常量中的一个。
    public static int makeMeasureSpec(int size, int mode)

    //这个是得到这个变量中表示的模式信息,将得到的值与三个常量进行比较。
    public static int getMode(int measureSpec)

    //这个是得到这个变量中表示的尺寸大小的值。
    public static int getSize(int measureSpec)

    Measure
    是对控件的大小的一个测量,

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

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

    measureChildren(int widthMeasureSpec, int heightMeasureSpec) 是用来测量所有子View的宽高。
    measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) 是用来测量单个子View的宽高。

    来源:https://blog.csdn.net/qq_32204197/article/details/76577412

    相关文章

      网友评论

          本文标题:(转)自定义控件MeasureSpecs与measure的理解

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