Android 兼容性问题 - 根据字符计算宽度导致 TextView 显示异常

一、问题说明

有一些场景,需要根据内容的长短动态设置 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 设置为居中,否则看上去会有点偏左。

搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值