美文网首页自定义View
自定义View - 2.自定义Textview的onMeasur

自定义View - 2.自定义Textview的onMeasur

作者: zsj1225 | 来源:发表于2018-06-09 12:39 被阅读8次

一般自定义View的步骤:
1.自定义属性
2.实现onMeasure 指定 控件的宽高

onMeasure方法

指定控件的宽高.
说到onMeasure,就不得不说三种测量模式.AT_MOST,EXACTLY,UNSPECIFIED(几乎用不到)

1.对于EXACTLY模式.确定就是说控件已经确定大小了.也就是控件在布局这样写.

ndroid:layout_width="100dp"
//或者
android:layout_width="match_parent"

对于确定控件大小,就不需要计算了.
2.对于AT_MOST模式.不确定大小.就需要自己计算了.对于不同的自定义view.看实际需要计算.就现在自定义Textview的举例.就是文字占的控件多大.就给控件设置宽高为多大.

 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        //指定控件的宽高
        //三种测量模式,AT_MOST , EXACTLY,UNSPECIFIED

        //获取测量模式
        int widthMeasureMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightMeasureMode = MeasureSpec.getMode(heightMeasureSpec);

        //宽度
        //1,确定的值,不需要计算.给多少就要多少
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);

        //2.wrap_content. 需要计算
        if (widthMeasureMode == MeasureSpec.AT_MOST) {
            //计算宽度 . 宽度和字的长度和字大小有关系 .所以画笔进行测量
            if (mBounds == null) {
                mBounds = new Rect();
            }

            mPaint.getTextBounds(mMyText, 0, mMyText.length(), mBounds);
            widthSize = mBounds.width();
        }


        //高度

        //1,确定的值,不需要计算.给多少就要多少
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);

        //2.wrap_content. 需要计算
        if (heightMeasureMode == MeasureSpec.AT_MOST) {
            //计算宽度 . 宽度和字的长度和字大小有关系 .所以画笔进行测量
            mPaint.getTextBounds(mMyText, 0, mMyText.length(), mBounds);
            heightSize = mBounds.height();
        }

        setMeasuredDimension(widthSize, heightSize);
    }

我们来看效果.给MyTextview设置背景就可以看到控件的大小

    <com.zsj.mytextview.MyTextView
        android:background="@color/colorAccent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:myText="MyTextView"
        app:myTextColor="@color/colorPrimary"
        app:myTextSize="30sp" />

效果如下.


image.png

相关文章

网友评论

    本文标题:自定义View - 2.自定义Textview的onMeasur

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