Jetpack Compose 中有 Surface 可组合,它代表一个 material surface。表面允许您设置背景颜色或边框等内容,但似乎可以使用 modifiers 来完成。我应该什么时候使用 Surface 可组合组件?它给我带来了什么好处?
答案 0 :(得分:11)
Surface 可组合使代码更容易,并明确指示代码使用 material 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)
)
但它有一些缺点:
backgroundColor
也用于两个地方。Surface
调整高度的颜色(在深色主题的情况下)according to the material design。如果您想要相同的行为,则应手动处理。有关 Surface 功能的完整列表,最好查看 documentation。