假设我在figma中有一个分辨率为1080x1920的屏幕,然后我添加20px填充,当我用compose重新创建这个布局时,我需要将20解析为dp(使用一些实用函数,例如:val Int.dp: Int get() = (这个 * Resources.getSystem().displayMetrics.密度 + 0.5f).toInt()) 或者我可以只使用 20.dp 吗?
目前我只使用 .dp 扩展名,从来没有遇到过问题。
您不必手动解析任何内容。如果您需要通过 Modifier 设置可组合项的填充、宽度或高度,那么使用 Dp 实现是最佳选择。但是,如果您需要在 Canvas 上绘制某些内容或进行一些低级布局测量,例如使用约束来定义 Offset,然后将 dp 转换为 px 值是可行的方法。这种转换可以通过使用
toPx()
、toDp()
以及更多 Density 方法来完成。请记住,这些方法只能在密度上下文中访问。
这是使用 dp 进行填充的基本应用:
Text(
modifier = Modifier.padding(horizontal = 16.dp),
text = "This text has a horizontal padding of 16."
)
使用 dp 到 px 转换在 Canvas 上绘制正方形的示例:
Canvas(
modifier = Modifier
.width(200.dp)
.height(100.dp),
onDraw = {
// Convert dp to px.
val sqareSize = 50.dp.toPx()
drawRect(
color = Color.Blue,
size = Size(
width = squareSize,
height = squareSize
)
)
}
)
如果您需要在未提供密度上下文时转换值:
val spacing = with(LocalDensity.current) { 16.dp.toPx() }
SubcomposeLayout { constraints ->
/// ...
layout(
width = constraints.maxWidth,
height = constraints.maxHeight
) {
/// ...
val itemOffsetX = previousItemOffsetX + spacing
}
/// ...
}