自适应大小单行显示TextView

2018-06-10  本文已影响46人  nodzhang

开发中有个简单的需求,就是在SplashActivity上显示一行免责声明,需要单行显示,并且在不同屏幕下也不能折行显示,所以就打算自定义TextView来解决这个问题。
直接上代码

/**
 * 自定义TextView,文本内容自动调整字体大小以单行显示
 * 
 */

public class SingleLineTextView extends android.support.v7.widget.AppCompatTextView {
    private Paint mTextPaint;
    private float mTextSize;

    public SingleLineTextView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        refitText(this.getText().toString(), this.getWidth());
    }

    /**
     * Re size the font so the specified text fits in the text box assuming the
     * text box is the specified width.
     *
     * @param text
     * @param textViewWidth
     */
    private void refitText(String text, int textViewWidth) {
        if (text == null || textViewWidth <= 0)
            return;
        mTextPaint = getPaint();
        mTextSize = getTextSize();
        int availableTextViewWidth = textViewWidth - getPaddingLeft() - getPaddingRight();
        float textMeausreWith = mTextPaint.measureText(text);
        if (textMeausreWith > availableTextViewWidth) {
            mTextSize = mTextSize * ((float) availableTextViewWidth / textMeausreWith);
        }
        this.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
    }

}

我们知道一个view绘制过程主要是两个步骤onMeasure()和onDraw(),所以我在onDraw()中进行了textview的长度计算,进行相应的调整,原理很简单。

上一篇 下一篇

猜你喜欢

热点阅读