自適應(yīng)大小單行顯示TextView

開發(fā)中有個(gè)簡(jiǎn)單的需求,就是在SplashActivity上顯示一行免責(zé)聲明,需要單行顯示,并且在不同屏幕下也不能折行顯示,所以就打算自定義TextView來解決這個(gè)問題。
直接上代碼

/**
 * 自定義TextView,文本內(nèi)容自動(dòng)調(diào)整字體大小以單行顯示
 * 
 */

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);
    }

}

我們知道一個(gè)view繪制過程主要是兩個(gè)步驟onMeasure()和onDraw(),所以我在onDraw()中進(jìn)行了textview的長(zhǎng)度計(jì)算,進(jìn)行相應(yīng)的調(diào)整,原理很簡(jiǎn)單。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容