TextView文字自适应

来源:互联网 发布:h3c ap端口修改为wan 编辑:程序博客网 时间:2024/06/06 05:31

由于常用,所以提取为静态方法,放入 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);    }




1 0