Используйте значок, чтобы отобразить небольшой визуальный элемент, обозначающий статус или числовое значение в другой composable-функции. Вот несколько распространённых сценариев, в которых вы можете использовать значок:
- Уведомления. Показывает количество непрочитанных уведомлений на значке приложения или колокольчике уведомлений.
- Сообщения. Указывают на новые или непрочитанные сообщения в чате.
- Обновления статуса. Показывают статус задачи, например "Выполнено", "Выполняется" или "Ошибка".
- Количество товаров в корзине. Показывает, сколько товаров в корзине пользователя.
- Новый контент. Расскажите о новом контенте или функциях, доступных пользователю.
API surface
Чтобы добавить значки в приложение, используйте composable-функцию BadgedBox. В конечном счете, это контейнер. Его внешний вид определяется двумя основными параметрами:
content– компонуемый контент, который содержитBadgedBox. ОбычноIcon.badge– composable-функция, которая отображается как значок над контентом. Обычно это специальная composable-функция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определяют внешний вид значка. - Composable-функция
Textдля слота контентаBadgeпоявляется внутри значка. В данном случае это количество товаров в корзине.
Вот как это выглядит: