緣起
開發中經常會遇到這樣的情況,某天你心情正好的時候,產品拿著某臺設備跑過來告訴你,快看這里的文字顯示不下了,開發會說:擦,你這個字太長了啊,當然就顯示不下了。然后產品會說:你看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);
}
算是一個快速解決問題能用的方案,供參考。