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