徽章

使用 徽章 在另一个可组合项上显示一个小的视觉元素,以指示状态或数值。以下是一些您可能使用徽章的常见场景

  • 通知:在应用程序图标或通知铃铛上显示未读通知的数量。
  • 消息:在聊天应用程序中指示新的或未读消息。
  • 状态更新:显示任务状态,例如“已完成”、“正在进行”或“失败”。
  • 购物车数量:显示用户购物车中的商品数量。
  • 新内容:突出显示用户可以使用的新的内容或功能。
Different example of the badge component.
图 1. 徽章示例

API 表面

使用 BadgedBox 可组合项在您的应用程序中实现徽章。它最终是一个容器。您可以使用以下两个主要参数控制其外观

  • contentBadgedBox 包含的可组合内容。通常为 Icon
  • badge:作为徽章显示在内容之上的可组合项。通常是专用的 Badge 可组合项。

基本示例

此代码片段显示了 BadgedBox 的基本实现

@Composable
fun BadgeExample() {
    BadgedBox(
        badge = {
            Badge()
        }
    ) {
        Icon(
            imageVector = Icons.Filled.Mail,
            contentDescription = "Email"
        )
    }
}

此示例显示一个重叠提供的 Icon 可组合项的徽章。请注意代码中的以下内容

  • BadgedBox 充当整体容器。
  • BadgedBoxbadge 参数的参数是 Badge。由于 Badge 本身没有参数,因此应用程序将显示默认徽章,即一个小红圈。
  • Icon 充当 BadgedBoxcontent 参数的参数。它是徽章显示在其上的图标。在本例中,它是一个邮件图标。

它的外观如下

A simple badge that contains no content.
图 2. 最小的徽章实现。

详细示例

以下代码段演示了如何在徽章中显示响应用户操作的值。

@Composable
fun BadgeInteractiveExample() {
    var itemCount by remember { mutableStateOf(0) }

    Column(
        verticalArrangement = Arrangement.spacedBy(16.dp)
    ) {
        BadgedBox(
            badge = {
                if (itemCount > 0) {
                    Badge(
                        containerColor = Color.Red,
                        contentColor = Color.White
                    ) {
                        Text("$itemCount")
                    }
                }
            }
        ) {
            Icon(
                imageVector = Icons.Filled.ShoppingCart,
                contentDescription = "Shopping cart",
            )
        }
        Button(onClick = { itemCount++ }) {
            Text("Add item")
        }
    }
}

此示例实现了一个带徽章的购物车图标,徽章显示用户购物车中的商品数量。

  • BadgedBox 仅在商品数量超过 0 时显示。
  • containerColorcontentColor 的参数控制徽章的外观。
  • Badge 内容插槽的 Text 可组合项显示在徽章内。在本例中,它显示了购物车中的商品数量。

此实现的显示如下

A badge implementation that contains the number of items in a shopping cart.
图 3. 显示购物车中商品数量的徽章。

其他资源