Android View的测量

2017-12-21  本文已影响0人  devstrongzhao

@Override

protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {

    setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));

}

private int  measureWidth(intmeasureSpec) {

        int result =0;

        int specMode = MeasureSpec.getMode(measureSpec);

        int specSize = MeasureSpec.getSize(measureSpec);

        if(specMode == MeasureSpec.EXACTLY) {

            result = specSize;

        }else{

            result =500;

            if(specMode == MeasureSpec.AT_MOST) {

                result = Math.min(result,specSize);

            }

        }

    return  result;

}

private int measureHeight(int measureSpec){

        int result=0;

        int specMode=MeasureSpec.getMode(measureSpec);

        int specSize=MeasureSpec.getSize(measureSpec);

        if(specMode==MeasureSpec.EXACTLY){

                result=specSize;

        }else{

                result=500;

                 if(specMode==MeasureSpec.AT_MOST){

                        result=Math.min(result,specSize);

                    }

        }

        return result;

}

Android View 的测绘是在OnMeasure() 方法中执行的。所以自定义view的时候要重写这个方法。

1.android 系统提供了一个MeasureSpec的类可以帮助我们测绘。

    测量模式有三种

        (1)EXACTLY

            即精确值模式,当我们将控件的layout_width属性或者layout_height属性指定固定的具体数值时,比如layout_width="100dp"或者指定值为match_parent属性时,系统使用的是精确模式

          (2)AT_MOST

                最大值模式。当控件的layout_width属性或者layout_height属性指定为wrap_content时,控件大小一般随着内从的变化或者子控件的变化而变化,此时控件的尺寸只要不超过父控件允许的最大值即可。

           (3)UNSPECIFIED

                    这个属性比较奇怪——它不指定其大小测量模式,View想多大就多大,通常情况下在自定view时使用。

上一篇 下一篇

猜你喜欢

热点阅读