我什么时候应该使用AndroidJetpackComposeSurface可组合?

Jetpack Compose 中有Surface可组合,它表示材料表面。表面允许您设置诸如背景颜色或边框之类的内容,但似乎可以使用修饰符来完成相同的操作。我应该什么时候使用 Surface 可组合组件以及它给我带来的好处?

回答

Surface可组合使代码更容易,并明确指示代码使用材料表面。让我们看一个例子:

Surface(
    color = MaterialTheme.colors.primarySurface,
    border = BorderStroke(1.dp, MaterialTheme.colors.secondary),
    shape = RoundedCornerShape(8.dp),
    elevation = 8.dp
) {
    Text(
        text = "example",
        modifier = Modifier.padding(8.dp)
    )
}

结果:

不使用 Surface 也可以获得相同的结果:

val shape = RoundedCornerShape(8.dp)
val shadowElevationPx = with(LocalDensity.current) { 2.dp.toPx() }
val backgroundColor = MaterialTheme.colors.primarySurface

Text(
    text = "example",
    color = contentColorFor(backgroundColor),
    modifier = Modifier
        .graphicsLayer(shape = shape, shadowElevation = shadowElevationPx)
        .background(backgroundColor, shape)
        .border(1.dp, MaterialTheme.colors.secondary, shape)
        .padding(8.dp)
)

但它有一些缺点:

  • 修改器链相当大,它实现了一个材质表面并不明显
  • 我必须为该形状声明一个变量并将其传递给三个不同的修饰符
  • 它使用contentColorFor来确定内容颜色,而 Surface 在幕后进行。因此,它backgroundColor也用于两个地方。
  • 我必须以像素为单位计算高程
  • Surface根据材料设计调整高度的颜色(在深色主题的情况下)。如果您想要相同的行为,则应手动处理。

有关 Surface 功能的完整列表,最好查看文档。


以上是我什么时候应该使用AndroidJetpackComposeSurface可组合?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>