安卓kotlin sp dp转px
代码

/**
 * 根据手机的分辨率sp 转成px(像素)
 */
inline val Double.sp: Int get() = run {
    toFloat().sp
}

inline val Int.sp: Int get() = run {
    toFloat().sp
}

inline val Float.sp: Int get() = run {
    val scale: Float = Resources.getSystem().displayMetrics.scaledDensity
    return (this * scale + 0.5f).toInt()
}

/**
 * 根据手机的分辨率dp 转成px(像素)
 */
//使用示例 10.dp
inline val Double.dp: Int get() = run {
    return toFloat().dp
}

inline val Int.dp: Int get() = run {
    return toFloat().dp
}

inline val Float.dp: Int get() = run {
    val scale: Float = Resources.getSystem().displayMetrics.density
    return (this * scale + 0.5f).toInt()
}

dp(Density-independent Pixels,密度无关像素)

定义与作用

dp也被叫做dip,它是一种基于屏幕密度的抽象单位。使用dp作为尺寸单位,可以确保在不同屏幕密度的设备上,元素的物理尺寸大致相同,从而实现界面的统一显示效果。这是因为dp会根据设备的屏幕密度进行自适应调整。

换算关系

dp与像素(px)之间的换算关系取决于设备的屏幕密度。公式如下:
plaintext
px = dp * (dpi / 160)
其中,dpi(dots per inch)是屏幕的像素密度,即每英寸的像素数。例如,在屏幕密度为 160 dpi 的设备上,1 dp 等于 1 px;而在屏幕密度为 320 dpi 的设备上,1 dp 等于 2 px。

使用场景

在布局文件中设置视图的宽度、高度、边距等尺寸时,通常会使用dp作为单位。例如:

<Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="Click me" />

sp(Scaled Pixels,缩放像素)

定义与作用

sp主要用于设置字体大小,它不仅会根据屏幕密度进行调整,还会考虑用户在系统设置中设置的字体大小偏好。这意味着使用sp作为字体大小单位,可以让用户根据自己的需求调整应用内字体的大小,提高了应用的易用性。

换算关系

sp与像素(px)之间的换算关系同样与屏幕密度有关,并且还会受到用户字体大小设置的影响。基本换算公式和dp类似:
plaintext
px = sp * (dpi / 160) * 字体缩放因子
其中,字体缩放因子是用户在系统设置中设置的字体大小比例。

使用场景

在布局文件中设置文本视图(如TextView)的字体大小时,通常会使用sp作为单位。例如:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello, World!"
    android:textSize="18sp" />

总结

dp:适用于布局中视图的尺寸设置,能保证在不同屏幕密度的设备上,视图的物理尺寸基本一致。
sp:专门用于字体大小的设置,会同时考虑屏幕密度和用户的字体大小偏好,为用户提供更好的阅读体验。
在安卓开发中,合理使用dp和sp单位可以提高应用界面的兼容性和用户体验。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐