緣起
開發(fā)中經常會遇到這樣的情況直焙,某天你心情正好的時候,產品拿著某臺設備跑過來告訴你吞琐,快看這里的文字顯示不下了捆探,開發(fā)會說:擦,你這個字太長了啊站粟,當然就顯示不下了黍图。然后產品會說:你看iOS是好的,看起來當文字太多的時候奴烙,字體變小了助被。之后Android開發(fā)就跑去問iOS開發(fā)你這個是怎么做到的,答曰:系統(tǒng)自帶的功能切诀,當顯示不下時會自動縮小字號揩环。Android開發(fā)表示心好累啊。幅虑。丰滑。沒辦法再怎么累,也得處理好這個問題倒庵。
解決方案
這個問題在Android開發(fā)中還是很普遍的褒墨,比如你在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);
}
算是一個快速解決問題能用的方案,供參考涂屁。