一、问题说明
有一些场景,需要根据内容的长短动态设置 TextView 的尺寸。
但是在 VIVO Y33S Android 12 机型上发现设置完尺寸直接多出了一些省略号。
获取宽度的方法为:
fun String.getWidth(sizePx: Float): Float {
val paint = Paint()
paint.textSize = sizePx
return paint.measureText(this)
}
当时刚发生该问题时,也是百思不得其解,我们猜测了以下情况:
特殊主题文字导致计算不准确,切换回默认主题文字?
获取文字尺寸方式不对,换一种获取尺寸的方式?
获取尺寸的时机不对?
延着这些方向尝试了,都不对!
最后发现是因为在 vivo 手机上文字要展示下所需要的宽度要比我们动态获取到的稍大一点,所以怎样都会展示出省略号。
二、解决方案
实际给 TextView 设置的宽度比动态获取到的多 2px。
fun String.getWidth(sizePx: Float): Float {
val paint = Paint()
paint.textSize = sizePx
return paint.measureText(this) + 2
}
注意:设置完后需要给 TextView 的 gravity 设置为居中,否则看上去会有点偏左。
搞定!