我正在使用
Jetpack Compose
,最近注意到 Card
包中的 androidx.compose.material3
可组合项要求其内容在 ColumnScope.
中提供。具体来说,Card 函数的内容参数需要 类型的 lambda @Composable ColumnScope.() -> Unit
。
为什么在这种情况下需要
ColumnScope
?使用Card
组件有什么优势或功能?
我试图从官方文档中了解其用途,但找不到明确的解释。任何见解或澄清将不胜感激!
package androidx.compose.material3
@Composable
fun Card(
modifier: Modifier = Modifier,
shape: Shape = CardDefaults.shape,
colors: CardColors = CardDefaults.cardColors(),
elevation: CardElevation = CardDefaults.cardElevation(),
border: BorderStroke? = null,
content: @Composable ColumnScope.() -> Unit
) {
Surface(
modifier = modifier,
shape = shape,
color = colors.containerColor(enabled = true).value,
contentColor = colors.contentColor(enabled = true).value,
tonalElevation = elevation.tonalElevation(enabled = true, interactionSource = null).value,
shadowElevation = elevation.shadowElevation(enabled = true, interactionSource = null).value,
border = border,
) {
Column(content = content)
}
}
如果您查看Material3 卡片设计指南,您会在使用部分的最顶部找到以下行:
文本和图像等元素应以清晰指示层次结构的方式放置在卡片上。
这强烈指出了分层布局,通常与放置子项的垂直方向相关。
通过要求
ColumnScope
的内容具有 Card
,可以更轻松地提供符合设计指南的 Card
内容。因此,鼓励 Android 开发人员遵循设计指南,并在此过程中节省一些时间,因为他们可以直接在内容上使用所有 Modifier
,而这些内容通常仅可用于作为
Column
子级的可组合项。例如,您可以直接使用
Modifier.align
水平定位项目。
对我来说,这似乎是为了方便并鼓励遵循指南。这是我对此的看法,尽管可能没有明确的答案。