Odznaki

Użyj plakietki, aby wyświetlić mały element wizualny oznaczający stan lub wartość liczbową na innym komponencie. Oto kilka typowych sytuacji, w których możesz użyć plakietki:

  • Powiadomienia: wyświetlanie liczby nieprzeczytanych powiadomień na ikonie aplikacji lub dzwonku powiadomień.
  • Wiadomości: wskazuje nowe lub nieprzeczytane wiadomości w aplikacji do czatowania.
  • Aktualizacje stanu: pokazują stan zadania, np. „ukończone”, „w toku” lub „nieudane”.
  • Liczba produktów w koszyku: wyświetla liczbę produktów w koszyku użytkownika.
  • Nowe treści: wyróżnij nowe treści lub funkcje dostępne dla użytkownika.
Inny przykład komponentu plakietki.
Rysunek 1. Przykłady plakietek

Powierzchnia interfejsu API

Użyj funkcji kompozycyjnej BadgedBox, aby zaimplementować plakietki w aplikacji. Jest to w końcu kontener. Wygląd możesz kontrolować za pomocą tych 2 głównych parametrów:

  • content: treść, z której można utworzyć komponent, zawarta w BadgedBox. Zwykle Icon.
  • badge: komponent kompozycyjny, który pojawia się jako plakietka nad treścią. Zwykle jest to dedykowany komponent Badge.

Podstawowy przykład

Ten fragment kodu pokazuje podstawową implementację BadgedBox:

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

W tym przykładzie wyświetlana jest plakietka, która nakłada się na podany element kompozycyjny Icon. Zwróć uwagę na te elementy kodu:

  • BadgedBox jest kontenerem ogólnym.
  • Argument parametru badge funkcji BadgedBox to Badge. Ponieważ funkcja Badge nie ma własnych argumentów, aplikacja wyświetla domyślny znaczek, czyli małe czerwone kółko.
  • Icon jest argumentem parametru content funkcji BadgedBox. Jest to ikona, nad którą wyświetla się plakietka. W tym przypadku jest to ikona poczty.

Wygląda to tak:

Prosta plakietka, która nie zawiera żadnych treści.
Rysunek 2. Minimalna implementacja logo.

Szczegółowy przykład

Poniższy fragment kodu pokazuje, jak wyświetlać w plakietce wartości, które reagują na działania użytkownika.

@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")
        }
    }
}

W tym przykładzie zaimplementowano ikonę koszyka z odznaką, która wyświetla liczbę produktów w koszyku użytkownika.

  • Ikona BadgedBox jest wyświetlana tylko wtedy, gdy liczba produktów jest większa niż 0.
  • Argumenty containerColorcontentColor określają wygląd plakietki.
  • Kompozycja Text dla miejsca na treść w Badge pojawia się w odznace. W tym przypadku wyświetla liczbę produktów w koszyku.

Ta implementacja wygląda tak:

Implementacja plakietki, która zawiera liczbę produktów w koszyku.
Rysunek 3. Plakietka wyświetlająca liczbę produktów w koszyku.

Dodatkowe materiały