我想了解如何更好地在 Compose 项目中使用 dp 和 sp 值。 我检查了几个开源 Compose 项目,其中大多数都对维度进行了硬编码。这绝对不是支持灵活性和不同屏幕尺寸的方法。 我现在看到了几种方法:
dimens.xml
并直接在调用 dimensionResource()
的 compose 函数中获取值。dimens.xml
的值。例如:
class AppDimensions {
val paddingSmall: Dp
@Composable
get() = dimensionResource(R.dimen.padding_small)
...
}
dimens.xml
并针对不同的屏幕尺寸实现您自己的逻辑。例如:
class AppDimensions {
val paddingSmall = when(screenSize) {
Compact -> 10.dp
Medium -> 16.dp
Expanded -> 20.dp
else -> 10.dp
}
...
}
我喜欢第三种变体,因为它看起来更灵活,并且允许我们避免返回 XML。但这需要努力来支持。
但是,也许我们可以以更方便的方式使用它吗?
我在撰写时使用这种方式;
val LocalDim = compositionLocalOf { Dimensions() }
data class Dimensions(
val default: Dp = 0.dp,
val spaceXXSmall: Dp = 2.dp,
val spaceExtraSmall: Dp = 4.dp,
val spaceSmall: Dp = 8.dp,
val spaceMedium: Dp = 16.dp,
val spaceLarge: Dp = 32.dp,
val spaceExtraLarge: Dp = 64.dp,
val spaceXXLarge: Dp = 128.dp,
val spaceXXXLarge: Dp = 256.dp
}
供使用;
val dimensions = LocalDim.current