【发布时间】:2021-05-01 10:39:43
【问题描述】:
大多数 Jetpack Compose API 使用 Dp 作为尺寸单位,但有时需要像素值。如何将 dp 值转换为 px?举个例子,graphicsLayer() 修饰符接受 translationX/Y 像素参数。
【问题讨论】:
标签: android android-jetpack android-jetpack-compose
大多数 Jetpack Compose API 使用 Dp 作为尺寸单位,但有时需要像素值。如何将 dp 值转换为 px?举个例子,graphicsLayer() 修饰符接受 translationX/Y 像素参数。
【问题讨论】:
标签: android android-jetpack android-jetpack-compose
Density接口定义了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 类的extension function,你可以把它看成是Dp 类的方法。但是由于toPx() 是在Density 接口内定义的,所以除非您提供密度为receiver,否则您不能使用它。最后,您可以从名为LocalDensity 的CompositionLocal 获取电流密度。
【讨论】:
LocalDensity,我查了)
Ambients 被命名为 CompositionLocals,因为 alpha-12,我已经更新了答案
LocalDensity.current.run { 16.toDp() }