Android动态调整字体大小以适应控件宽度
2017-03-07 本文已影响425人
ship1912
最近遇到一个用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);
}
不过在调试的时候又发现其他问题,我是在Adapter的 getView 方法中设置textview的文字内容的,问题出在最大宽度值的获取上面。
一开始我直接用textView的getWidth方法。运行之后发现没有效果,原来getWidth获取到的值为0。不过当listView刷新一次后自适应会有效!
然后我试着将maxWidth改成textView的 getMeasuredWidth,这时,第一次显示的时候是正常的,不过每刷新一次listview,文字都小一号,多刷几次后都看不见了!原来字体缩小以后 textView 的 getMeasuredWidth 方法获取到的值也减小了。
最终使用的方法是用背景图片 imageView 的 getMeasuredWidth 方法获取宽度。能够正常显示。