Compose UI 之 Card 卡片组件

本文介绍了Android Compose UI中的Card组件,包括Filled Card、Elevated Card和Outlined Card三种样式。Card常用于列表数据、信息提示和内容详情页,提供可交互的界面元素。Compose UI为每种卡片样式提供了不同的视觉效果和交互体验,如Filled Card的基础展示,Elevated Card的突出外观,以及Outlined Card的边界强调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Card

Card 是用于显示带有圆角和可选阴影的矩形内容容器。它通常用于构建用户界面,并可以包含标题、文本、图像、按钮等元素,表示界面上的可交互元素,我们称它是 “卡片”。

Card 使用的一些经典的场景:

  • 列表数据,例如 新闻列表,产品列表等。
  • 信息提示框,使用 Card 组件突出显示。
  • 内容详情页卡片。

出上面列出的 3 中场景,还有其较多的场景可以使用卡片组件,这里不再一一列出。

Compose UI 库中定义了 3 种样式的卡片组件。分别是 Filled Card,Elevated Card,Outlined Card。3 种卡片的设计准则是一致的。

Compose-Card_measures.png

属性
外形(shape) 12dp 大小的圆角
左右内边距(left/right padding) 16dp
卡片组件之间的间距 最大 8dp
标签对齐方式 Start-aligned:靠左或靠右(在一些文字从右向左的国家)

它们执行后的样式有所区别。

默认情况下,Card 中的子 composables 布局在一个 column 中,即子 composables 是在竖直方向上一个个排列。

Filled Card

先看下它的声明,它有两个声明方式。

// 下面这个声明的 Card 不接收事件,只用作展示详情信息。
@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
): Unit

// 下面的声明可以用于交互,设置 Card 的可用性。
@Composable
fun Card(
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    shape: Shape = CardDefaults.shape,
    colors: CardColors = CardDefaults.cardColors(),
    elevation: CardElevation = CardDefaults.cardElevation(),  // 默认值是没有阴影的。
    border: BorderStroke? = null,
    interactionSource: MutableInteractionSource? = null,
    content: @Composable ColumnScope.() -> Unit
): Unit

上述:

  • 第一个声明是用于展示详情信息使用,不处理点击事件。
  • 第二个声明可以接收点击事件,并可以定义点击回调。

声明中主要的参数说明如下表。

参数名 类型 描述
modifier Modifier 修改或增强组件的某些属性,例如大小、位置、背景等。默认值是Modifier,表示不使用任何特定的修饰符。
shape Shape 定义卡片的形状。默认是CardDefaults.shape,这通常是一个带有圆角的矩形。
colors CardColors 定义卡片的颜色方案。这包括卡片的背景颜色、边框颜色等。默认值是CardDefaults.cardColors(),它提供了一套默认的颜色配置。
elevation CardElevation 定义卡片的阴影或“高度”。这可以给卡片一个立体的外观。默认值是CardDefaults.cardElevation(),它定义了一个默认的阴影效果。
border BorderStroke? 定义卡片的边框样式,如宽度、颜色和形状。默认是null,表示没有边框。
content @Composable ColumnScope.() -> Unit 这是一个Lambda函数,定义了卡片内部的内容。由于它是在ColumnScope中定义的,所以你可以在卡片内部添加列式布局的内容。
interactionSource MutableInteractionSource? 与用户交互相关的状态源,如按下、拖动等。这可以用于创建更复杂的交互效果。默认是null
onClick () -> Unit 这是一个Lambda函数,当用户点击卡片时会被调用。你可以在这里定义点击卡片后应执行的操作。
enabled Boolean 表示卡片是否可以被用户交互。默认为true,意味着卡片默认是可以交互的。

从上述参数列表中,可以看出,第二个声明方式兼容了第一个声明的方式,将 enabled 参数给值 false 并且设置好 colors 参数值,就可以实现与第一个声明同样的效果。

看以下第一个 Card 声明的使用示例如下。

@Composable
fun CardNonclickableSample() {
   
    Box (modifier=Modifier.fillMaxSize().padding(16.dp), contentAlignment = Alignment.Center) {
   
        Card(
            modifier = Modifier.width(250.dp).height(100.dp).background(color=Color.Yellow).padding(5.dp),
            shape = RoundedCornerShape(8.dp),
            colors = CardDefaults.cardColors(containerColor = Color.White, contentColor = Color.DarkGray),
            elevation = CardDefaults.cardElevation(defaultElevation = 6.dp),
            border = BorderStroke(width=2.dp, brush = SolidColor(Color.Green)),
        ) {
   
            Text("这是一个Card组件示例", modifier=Modifier.padding(
### Jetpack Compose 控件使用指南 Jetpack Compose 是一种现代的声明式 UI 工具包,用于构建原生 Android 应用程序界面。它通过简洁而强大的 Kotlin API 提供了一种全新的方式来创建用户界面[^1]。 #### 一、基础控件介绍 Jetpack Compose 中的基础控件包括但不限于 `Text`、`Button` 和 `Image` 等。以下是几个常见的控件及其基本用法: - **Text**: 显示文本内容。 ```kotlin Text(text = "Hello, Compose!", fontSize = 24.sp) ``` - **Button**: 创建可点击按钮。 ```kotlin Button(onClick = { /* 执行操作 */ }) { Text("点击我") } ``` - **Image**: 加载并显示图片资源。 ```kotlin Image(painter = painterResource(id = R.drawable.example), contentDescription = null) ``` 以上控件均可以通过属性设置样式和行为,例如字体大小、颜色、背景等[^2]。 --- #### 二、高级控件与功能扩展 除了基础控件外,Compose 还提供了更复杂的功能支持,比如列表展示、表单输入以及状态管理等功能。 - **LazyColumn/LazyRow**: 动态加载数据的滚动容器。 ```kotlin LazyColumn { items(listOfItems) { item -> Text(text = item.name) } } ``` - **TextField**: 输入框组件,适用于收集用户输入的数据。 ```kotlin var text by remember { mutableStateOf("") } TextField(value = text, onValueChange = { newText -> text = newText }) ``` - **Card/Surface**: 卡片或表面容器,通常用来包裹其他子组件形成独立区域。 ```kotlin Card(modifier = Modifier.padding(8.dp)) { Column { Text("卡片标题", fontWeight = FontWeight.Bold) Text("这是描述文字...") } } ``` 这些高级控件能够显著增强用户体验,并简化开发者的工作流程[^3]。 --- #### 三、自定义控件开发 当内置控件无法满足特定需求时,可以利用 Canvas 或者组合现有控件的方式实现高度定制化的视觉效果。 - **Canvas 绘制图形**: ```kotlin Canvas(modifier = Modifier.size(200.dp)) { drawCircle(color = Color.Blue, radius = size.minDimension / 2f) } ``` - **复合控件设计**: 将多个简单控件拼接成一个新的逻辑单元,从而提高代码复用性和维护性[^4]。 --- #### 四、实际案例分析 为了更好地理解如何运用 Jetpack Compose 构建真实世界的应用场景,可以从以下几个方面入手: - 参考官方样例项目 [compose-samples](https://github.com/android/compose-samples),其中包含了丰富的演示模块。 - 学习社区贡献作品,例如基于 Compose 实现的网易云音乐客户端模仿版本[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚妄皆空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值