直播购物源码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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章