美文网首页
Android View的测量

Android View的测量

作者: devstrongzhao | 来源:发表于2017-12-21 12:56 被阅读0次

    @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时使用。

    相关文章

      网友评论

          本文标题:Android View的测量

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