Android动态调整字体大小以适应控件宽度

最近遇到一个用ImageView为背景来显示文字的TextView适配问题,当要显示的文字太长时文本会换行,而iOS中没有这个问题。

在网上查找资料,发现可以用TextPaint加measureText方法解决这个问题,代码如下:

 /** 字体大小适配**/
 public static void adjustTvTextSize(TextView tv, int maxWidth, String text)
{
    int avaiWidth = maxWidth - tv.getPaddingLeft() - tv.getPaddingRight() - 10;

    if (avaiWidth <= 0) {
        return;
    }

    TextPaint textPaintClone = new TextPaint(tv.getPaint());
    float trySize = textPaintClone.getTextSize();

    while (textPaintClone.measureText(text) > avaiWidth) {
        trySize--;
        textPaintClone.setTextSize(trySize);
    }

    tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
}

不过在调试的时候又发现其他问题,我是在AdaptergetView 方法中设置textview的文字内容的,问题出在最大宽度值的获取上面。

一开始我直接用textView的getWidth方法。运行之后发现没有效果,原来getWidth获取到的值为0。不过当listView刷新一次后自适应会有效!

然后我试着将maxWidth改成textView的 getMeasuredWidth,这时,第一次显示的时候是正常的,不过每刷新一次listview,文字都小一号,多刷几次后都看不见了!原来字体缩小以后 textViewgetMeasuredWidth 方法获取到的值也减小了。

最终使用的方法是用背景图片 imageViewgetMeasuredWidth 方法获取宽度。能够正常显示。

你可能感兴趣的:(Android动态调整字体大小以适应控件宽度)