我什么时候应该使用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 功能的完整列表,最好查看文档。
THE END
二维码