如何将Dp转换为像素在Android Jetpack撰写?



大多数Jetpack Compose API使用Dp作为尺寸单位,但有时需要像素值。如何将dp值转换为px?举个例子,graphicsLayer()修饰符接受以像素为单位的translationX/Y参数。

密度接口定义了toPx()roundToPx()方法,你可以这样使用:

import androidx.compose.ui.platform.LocalDensity
val pxValue = with(LocalDensity.current) { 16.dp.toPx() }
// or
val pxValue = LocalDensity.current.run { 16.dp.toPx() }

如果您是Kotlin语言的新手,那么这样的表达式可能会让您感到困惑,所以让我们来分解一下,看看它是如何工作的。toPx()Dp类的扩展函数,可以看作是Dp类的方法。但是由于toPx()是在密度接口内定义的,所以除非提供密度作为接收器,否则不能使用它。最后,您可以从名为LocalDensity的compostionlocal中获得当前密度。

@Valeriy的答案绝对是正确的方法,但如果你想让它稍微不那么冗长,或者你有很多转换要做,你可以创建扩展函数:

@Composable
fun Dp.dpToPx() = with(LocalDensity.current) { this@dpToPx.toPx() }

@Composable
fun Int.pxToDp() = with(LocalDensity.current) { this@pxToDp.toDp() }

这允许您将dp直接转换为px,反之亦然。

val dpValue = 16.dp
val pxConverted = dpValue.dpToPx()
val pxValue = 100
val dpConverted = pxValue.pxToDp()

最新更新