在项目开发中会经常遇见TextView字体大小自适应的需求,比如个人中心中公司名称:
实现这样的功能是需要自己实现的。
/**
* 根据给定的宽度,自动缩小TextView的字体
*
* @param txt
* @param maxWidth
* @param value
*/
public static void autoTextSize(TextView txt, float maxWidth, String value) {
if (txt == null) {
return;
}
if (maxWidth <= 0) {
return;
}
if (TextUtils.isEmpty(value)) {
return;
}
float tvWidth = txt.getPaint().measureText(value);
LogUtils.d("tvWidth1 = " + tvWidth);
// 如果超出边界,调整字体
int count = 0;
while (tvWidth > maxWidth) {
//防止无限循环导致anr等问题
if (count > 100) {
break;
}
count++;
txt.setTextSize(TypedValue.COMPLEX_UNIT_PX, txt.getTextSize() - 1);
tvWidth = txt.getPaint().measureText(value);
LogUtils.d("tvWidth2 = " + tvWidth);
}
txt.setText(value);
}