onMeasure

来源:互联网 发布:edius有mac版吗 编辑:程序博客网 时间:2024/06/06 04:46

onMeasure有三种MeasureSpec.EXACTLY,MeasureSpec.AT_MOST,MeasureSpec.UNSPECIFIED
可以理解为精确(如:200dp,match_parent),不超过最大值(wrap_content),未知的
最后调用setMeasuredDimension(width,height);来设置view的大小

<com.lyg.testdemo.TestView        android:layout_width="200dp"        android:layout_height="match_parent"/>
日志:E/TAG: EXACTLY
<com.lyg.testdemo.TestView        android:layout_width="wrap_content"        android:layout_height="match_parent"/>
日志:E/TAG: AT_MOST
    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)    {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        int widthSize=getWidthSize(widthMeasureSpec);        int heightSize=getHeightSize(heightMeasureSpec);        setMeasuredDimension(widthSize,heightSize);    }    private void getWidthSize(int widthMeasureSpec)    {        int mode = MeasureSpec.getMode(widthMeasureSpec);        switch (mode)        {            case MeasureSpec.EXACTLY:                Log.e("TAG", "EXACTLY");                break;            case MeasureSpec.AT_MOST:                Log.e("TAG", "AT_MOST");                break;            case MeasureSpec.UNSPECIFIED:                Log.e("TAG", "UNSPECIFIED");                break;            default:                break;        }    }    private void getHeightSize(int heightMeasureSpec)    {        int mode = MeasureSpec.getMode(heightMeasureSpec);        switch (mode)        {            case MeasureSpec.EXACTLY:                break;            case MeasureSpec.AT_MOST:                break;            case MeasureSpec.UNSPECIFIED:                break;            default:                break;        }    }
0 0