在 Jetpack Compose Glimmer 中,Card 组件充当相关内容的主要容器,为易于理解的信息单元创建清晰的视觉边界。卡片具有高度适应性,可支持主内容、可选标题、副标题以及前导或后随图标的组合。卡片默认会填充最大可用宽度,可聚焦,也可设为可点击。卡片支持垂直排列,其中标题图片位于最上方,后面依次是标题、副标题和正文内容。
卡片基于 Jetpack Compose Glimmer surface 系统构建,因此继承了深度效果、剪裁和一致的边框突出显示等物理属性。
广告剖析和广告位
Jetpack Compose Glimmer 卡片由多个专用元素构建而成,可用于自定义其内容和布局。
| 广告位 | 说明 |
|---|---|
标题 |
卡片的顶部区域,用于放置图片。 |
标题和副标题 |
这些文本字段用于提供卡片的主要标签和辅助标签。标题位于副标题上方。 |
前置图标 |
显示在卡片内容区域开头的可选图标(通常为 |
尾随图标 |
显示在卡片内容区域末尾的可选图标。 |
主要内容 |
卡片的正文部分,用于放置主要 |
卡片默认设置
以下默认设置适用于卡片:
- 宽度:卡片会填充显示屏的最大可用宽度,以优化带屏眼镜上的可读性。
- 最低高度:
80.dp - 文字垂直间距:
3.dp - 标头形状:使用
RoundedCornerShape,具有24.dp个边角 - 内容内边距:默认为
GlimmerTheme.componentSpacingValues.medium。这会影响标题图片和内容容器周围的最外层内边距。 - 形状:默认为
GlimmerTheme.shapes.medium。 文本渲染:针对以下 slot 使用
GlimmerTheme.typography中的默认值:- 标题:
bodyMedium - 副标题:
caption - 主要内容:
bodySmall
- 标题:
示例:基本卡片
以下代码展示了构建卡片所需的最少代码:
Card { Text("This is a card") }
示例:包含多个卡槽的卡片
以下代码展示了如何将多个 slot 搭配使用来构建卡片:
Card( title = { Text("Card Title", style = GlimmerTheme.typography.titleMedium) }, subtitle = { Text("Sub-heading text", style = GlimmerTheme.typography.titleSmall) }, leadingIcon = { Icon(FavoriteIcon, contentDescription = "Favorite") }, trailingIcon = { Icon(BookmarkIcon, contentDescription = "Bookmark") }, header = { Image( painter = myHeaderImage, contentDescription = "Header image", contentScale = ContentScale.FillWidth ) }, ) { Text("This is a complete card") }
代码要点
- 展示了如何使用各种卡片元素(例如
title、subtitle和leadingIcon)自定义卡片的内容和结构。 - 使用
Card重载和onClick使整个卡片界面具有互动性。
操作卡片
如果您想在卡片中添加操作按钮,请使用 ActionCard。操作卡片与标准卡片具有相同的元素,此外还包含一个用于定义底部按钮的额外 action 参数。
ActionCard 示例。示例:基本操作卡片
此代码展示了如何创建 ActionCard:
ActionCard( action = { Button(onClick = {}, trailingIcon = { Icon(FavoriteIcon, "Localized description") }) { Text("Send") } } ) { Text("This is a card with a title, leading icon, header image, and action") }
示例:带有图标的操作卡片
此代码展示了如何创建包含图标的更复杂的 ActionCard:
ActionCard( title = { Text("Card Title", style = GlimmerTheme.typography.titleMedium) }, subtitle = { Text("Sub-heading text", style = GlimmerTheme.typography.titleSmall) }, leadingIcon = { Icon(FavoriteIcon, contentDescription = "Favorite") }, header = { Image( painter = myHeaderImage, contentDescription = "Header image", contentScale = ContentScale.FillWidth ) }, action = { Button(onClick = { /* Handle action */ }) { Text("Action") } } ) { Text( "This is the main body content of the card, utilizing theme-tokens for consistent styling.", style = GlimmerTheme.typography.bodyMedium ) }