Используйте значок для отображения небольшого визуального элемента, обозначающего статус или числовое значение в другом компонуемом элементе. Вот несколько распространённых ситуаций, в которых можно использовать значок:
- Уведомления : отображение количества непрочитанных уведомлений на значке приложения или колокольчике уведомлений.
- Сообщения : отображают новые или непрочитанные сообщения в чат-приложении.
- Обновления статуса : отображение статуса задачи, например «завершено», «в процессе» или «не выполнено».
- Количество товаров в корзине : отображение количества товаров в корзине пользователя.
- Новый контент : выделите новый контент или функции, доступные пользователю.
API поверхность
Используйте компонуемый элемент BadgedBox для реализации значков в вашем приложении. По сути, это контейнер. Вы управляете его внешним видом с помощью следующих двух основных параметров:
-
content: Компонуемое содержимое, которое содержитBadgedBox. ОбычноIcon. -
badge: компонуемый элемент, отображаемый поверх контента. Обычно это специальный компонуемыйBadge.
Простой пример
В этом фрагменте кода показана базовая реализация BadgedBox :
@Composable fun BadgeExample() { BadgedBox( badge = { Badge() } ) { Icon( imageVector = Icons.Filled.Mail, contentDescription = "Email" ) } }
В этом примере отображается значок, перекрывающий предоставленный компонуемый Icon . Обратите внимание на следующее в коде:
-
BadgedBoxслужит общим контейнером. - Аргументом параметра
badgeобъектаBadgedBoxявляетсяBadge. Поскольку уBadgeнет собственных аргументов, приложение отображает значок по умолчанию — маленький красный кружок. -
Iconслужит аргументом параметраcontentдляBadgedBox. Это значок, над которым отображается значок. В данном случае это значок почты.
Вот как это выглядит:

Подробный пример
В следующем фрагменте показано, как можно отображать на значке значения, реагирующие на действия пользователя.
@Composable fun BadgeInteractiveExample() { var itemCount by remember { mutableIntStateOf(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. - Аргументы
containerColorиcontentColorуправляют внешним видом значка. -
Text, который можно добавить в слот содержимогоBadge, отображается внутри значка. В данном случае он отображает количество товаров в корзине.
Эта реализация выглядит следующим образом:
