Android 提供了一个 autoSizeTextType 属性来自动调整字体大小,但是它仅适用于 API Level 26 及以上的版本。对于 API Level 25 及以下的版本,可以通过代码计算最佳字体大小来实现动态调整。以下是使用 Kotlin 代码实现的示例:
-
- fun getBestFontSize(text: String, maxWidth: Int, maxHeight: Int): Float {
- val paint = Paint()
- var textSize = 100f // 初始字体大小,可根据实际情况调整
- var bound = Rect()
- paint.textSize = textSize
- paint.getTextBounds(text, 0, text.length, bound)
- while (bound.width() > maxWidth || bound.height() > maxHeight) {
- textSize -= 1
- paint.textSize = textSize
- paint.getTextBounds(text, 0, text.length, bound)
- }
- return textSize
- }
该函数的输入是要显示的文本、区域的最大宽度和最大高度,输出是最佳字体大小。使用 paint.getTextBounds() 函数获得文本的实际宽度和高度,并在 while 循环中不断减小字体大小,直到宽度和高度都符合要求。最后返回最佳字体大小即可。在将字体应用于视图之前,还应该将像素值转换为 sp 单位。例如:
-
- val bestFontSize = getBestFontSize("Hello, World!", maxWidth, maxHeight)
- val scaledFontSize = TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_SP, bestFontSize, resources.displayMetrics)
- textView.textSize = scaledFontSize