直播購物源碼TextView文字自動變小

開發中經常會遇到讓TextView字體大小自適應的需求,ios端可以自適應大小,Android不行,我們需要單獨處理。

當然了,針對的肯定是單行的TextView,如果是多行的,還需要加入行數這個變量。

實現思路是根據tv.getPaint().measureText()方法獲取當前的寬度,跟TextView控件的長度進行對比,如果TextView的寬度大於期望寬度,就減小字體大小,直到TextView的寬度等於或小於期望寬度。代碼實現如下:

/**
 * 根據給定的寬度,自動縮小TextView的字體,step爲1px
 *
 * @param tv
 * @param maxWidth
 * @param value
 */
public static void adaptTextSize(TextView tv, float maxWidth, String value) {
    if (tv == null) {
        return;
    }
    if (maxWidth <= 0) {
        return;
    }
    if (TextUtils.isEmpty(value)) {
        return;
    }

    float tvWidth = tv.getPaint().measureText(value);

    // 如果超出邊界,調整字體
    int count = 0;
    while (tvWidth > maxWidth) {
        //防止無限循環導致anr等問題
        if (count > 100) {
            break;
        }
        count++;
        tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() - 1);
        tvWidth = tv.getPaint().measureText(value);
    }

    tv.setText(value);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章