TextView文字自适应

由于常用,所以提取为静态方法,放入 Tool类中

private static TextPaint textPaint = new TextPaint();

public static void adjustTvTextSize(TextView tv, int maxWidth, String text, int sp) {
        int avaiWidth = maxWidth - tv.getPaddingLeft() - tv.getPaddingRight() - 10;
        if (avaiWidth <= 0) {
            return;
        }
//        TextPaint textPaint = new TextPaint(); 增加复用,放入静态变量
        float trySize = Tool.dpToPx(sp);
        textPaint.setTextSize(trySize);
        while (textPaint.measureText(text) > avaiWidth) {
            trySize--;
            textPaint.setTextSize(trySize);
        }
        tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
        tv.setText(text);
    }

代码解释

 /**文字自适应控件宽度
     * @param tv          控件
     * @param maxWidth    控件宽度
     * @param text        文字
     * @param sp          文字size
     *
     *                    1、avaiWidth --- 文字所能使用宽度, -10 是为了让文字不紧贴右侧
     *                    2、textPaint,文字画笔,设置测量所用字体大小,单位 px
     *                    3、textPaint.measureText(Text) --- 测量文字宽度
     *                    4、循环
     * */

附上常抽取方法

    /**
     * 像素转换为密度值
     */
    public static int pxToDp(float px) {
        final float scale = res.getDisplayMetrics().density;
        return (int) (px / scale + 0.5f);
    }

/**
     * 密度转换为像素值
     */
    public static int dpToPx(float dp) {
        final float scale = res.getDisplayMetrics().density;
        return (int) (dp * scale + 0.5f);
    }




你可能感兴趣的:(TextView文字自适应)