缘起
开发中经常会遇到这样的情况,某天你心情正好的时候,产品拿着某台设备跑过来告诉你,快看这里的文字显示不下了,开发会说:擦,你这个字太长了啊,当然就显示不下了。然后产品会说:你看iOS是好的,看起来当文字太多的时候,字体变小了。之后Android开发就跑去问iOS开发你这个是怎么做到的,答曰:系统自带的功能,当显示不下时会自动缩小字号。Android开发表示心好累啊。。。没办法再怎么累,也得处理好这个问题。
解决方案
这个问题在Android开发中还是很普遍的,比如你在google中搜索"android textview auto font size",会看到一大堆关于这个问题的帖子,绝大部分都是网友在stackoverflow上的提问,比如像:
How to adjust text font size to fit textview
Auto Scale TextView Text to Fit within Bounds
这2个问题竟然都是5、6年前问的。。。
我自己的做法思路跟这些差不多,代码很简单,如下:
private 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());
// note that Paint text size works in px not sp
float trySize = textPaintClone.getTextSize();
while (textPaintClone.measureText(text) > avaiWidth) {
trySize--;
textPaintClone.setTextSize(trySize);
}
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
}
算是一个快速解决问题能用的方案,供参考。
网友评论