Используйте значок для отображения небольшого визуального элемента, обозначающего статус или числовое значение в другом компонуемом элементе. Вот несколько распространённых ситуаций, в которых можно использовать значок:
- Уведомления : отображение количества непрочитанных уведомлений на значке приложения или колокольчике уведомлений.
- Сообщения : отображают новые или непрочитанные сообщения в чат-приложении.
- Обновления статуса : отображение статуса задачи, например «завершено», «в процессе» или «не выполнено».
- Количество товаров в корзине : отображение количества товаров в корзине пользователя.
- Новый контент : выделите новый контент или функции, доступные пользователю.
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 { 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. - Аргументы
containerColor
иcontentColor
управляют внешним видом значка. -
Text
, который можно добавить в слот содержимогоBadge
, отображается внутри значка. В данном случае он отображает количество товаров в корзине.
Эта реализация выглядит следующим образом:
