開發中經常會遇到讓TextView字體大小自適應的需求,ios端可以自適應大小,Android不行,我們需要單獨處理。
當然了,針對的肯定是單行的TextView,如果是多行的,還需要加入行數這個變量。
實現思路是根據tv.getPaint().measureText()方法獲取當前的寬度,跟TextView控件的長度進行對比,如果TextView的寬度大於期望寬度,就減小字體大小,直到TextView的寬度等於或小於期望寬度。代碼實現如下:
/**
* 根據給定的寬度,自動縮小TextView的字體,step爲1px
*
* @param tv
* @param maxWidth
* @param value
*/
public static void adaptTextSize(TextView tv, float maxWidth, String value) {
if (tv == null) {
return;
}
if (maxWidth <= 0) {
return;
}
if (TextUtils.isEmpty(value)) {
return;
}
float tvWidth = tv.getPaint().measureText(value);
// 如果超出邊界,調整字體
int count = 0;
while (tvWidth > maxWidth) {
//防止無限循環導致anr等問題
if (count > 100) {
break;
}
count++;
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() - 1);
tvWidth = tv.getPaint().measureText(value);
}
tv.setText(value);
}