繁体   English   中英

在 Jetpack Compose 中使用 dp 和 sp 尺寸的最佳做法是什么?

[英]What is the best practice using dp and sp dimensions in Jetpack Compose?

我想了解如何更好地在 Compose 项目中使用 dp 和 sp 值。 我检查了几个开源 Compose 项目,其中大多数都在对维度进行硬编码。 但这绝对不是一种支持灵活性和不同屏幕尺寸的方法。 我现在看到了几种方法:

  1. 使用dimens.xml的旧方法并直接在调用dimensionResource()的组合函数中获取值。
  2. dimens.xml中引用了 dimens.xml 的值。 例如:
object AppDimensions {
   val paddingSmall = dimensionResource(R.dimen.padding_small)
   ...
}
  1. 不要使用dimens.xml并针对不同的屏幕尺寸实现自己的逻辑。 例如:
object AppDimensions {
  val paddingSmall = when(windowSizeClass.widthSizeClass) {
      Compact -> 10.dp
      Medium -> 16.dp
      Expanded -> 20.dp
      else -> 10.dp
  }
  ...
}

我喜欢第 3 个变体,因为它看起来更灵活,并且允许我们避免返回到 xmls。 但这需要努力来支持它。

但也许,我们可以以更方便的方式使用它吗?

我在撰写中使用这种方式;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM