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 方法获取宽度。能够正常显示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容