最近遇到一個(gè)用ImageView為背景來顯示文字的TextView適配問題氏义,當(dāng)要顯示的文字太長時(shí)文本會(huì)換行,而iOS中沒有這個(gè)問題。
在網(wǎng)上查找資料,發(fā)現(xiàn)可以用TextPaint加measureText方法解決這個(gè)問題僚碎,代碼如下:
/** 字體大小適配**/
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);
}
不過在調(diào)試的時(shí)候又發(fā)現(xiàn)其他問題,我是在Adapter的 getView 方法中設(shè)置textview的文字內(nèi)容的阴幌,問題出在最大寬度值的獲取上面勺阐。
一開始我直接用textView的getWidth方法。運(yùn)行之后發(fā)現(xiàn)沒有效果矛双,原來getWidth獲取到的值為0渊抽。不過當(dāng)listView刷新一次后自適應(yīng)會(huì)有效!
然后我試著將maxWidth改成textView的 getMeasuredWidth议忽,這時(shí)懒闷,第一次顯示的時(shí)候是正常的,不過每刷新一次listview栈幸,文字都小一號(hào)愤估,多刷幾次后都看不見了!原來字體縮小以后 textView 的 getMeasuredWidth 方法獲取到的值也減小了速址。
最終使用的方法是用背景圖片 imageView 的 getMeasuredWidth 方法獲取寬度玩焰。能夠正常顯示。