You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,所以正好对应你看到的倍数差。

解决办法

如果想让设置和读取的数值一致,有两种方式:

  1. 设置时直接用px单位:
    // 先把你要的sp值转成px再设置
    val targetSp = 20f
    val targetPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, targetSp, resources.displayMetrics)
    tdp20.textSize = targetPx
    // 此时读取的textSize就是targetPx,和设置的数值一致
    
  2. 读取时把px转回sp:
    tdp20.textSize = size20before // size20before是你要设置的sp值
    val sizeAfterPx = tdp20.textSize
    // 把px转成sp
    val sizeAfterSp = sizeAfterPx / resources.displayMetrics.scaledDensity
    // 此时sizeAfterSp就和size20before数值一致了
    

内容的提问来源于stack exchange,提问作者Esel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:54:23