Kotlin中TextView的textSize读写单位不一致问题求助
TextView设置textSize后读取值不一致的原因及解决办法
- 核心问题是单位不匹配:
- 直接给
textSize赋值时,默认用的是sp(缩放像素),这个单位会跟着设备屏幕密度自动调整大小。 - 但读取
textSize时,拿到的是px(实际显示的像素),这是TextView内部实际存储的尺寸。
- 直接给
- 不同设备倍数不同的原因:
不同手机的屏幕密度(dpi)不一样,sp转成px的公式是:px = sp × (屏幕dpi ÷ 160)。你提到的Moto C屏幕dpi是240,240÷160=1.5;realme 8的dpi是640,640÷160=4,所以正好对应你看到的倍数差。
解决办法
如果想让设置和读取的数值一致,有两种方式:
- 设置时直接用px单位:
// 先把你要的sp值转成px再设置 val targetSp = 20f val targetPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, targetSp, resources.displayMetrics) tdp20.textSize = targetPx // 此时读取的textSize就是targetPx,和设置的数值一致 - 读取时把px转回sp:
tdp20.textSize = size20before // size20before是你要设置的sp值 val sizeAfterPx = tdp20.textSize // 把px转成sp val sizeAfterSp = sizeAfterPx / resources.displayMetrics.scaledDensity // 此时sizeAfterSp就和size20before数值一致了
内容的提问来源于stack exchange,提问作者Esel
相关产品推荐
相关产品推荐

