Chips

Komponent Chip to kompaktowy, interaktywny element interfejsu. Reprezentują one złożone elementy, takie jak kontakty lub tagi, często z ikoną i etykietą. Może być zaznaczany, usuwany lub klikalny.

Oto 4 rodzaje komponentów i miejsca, w których możesz ich używać:

  • Pomoc: prowadzi użytkownika podczas wykonywania zadania. Często pojawia się jako tymczasowy element interfejsu w odpowiedzi na dane wejściowe użytkownika.
  • Filtr: umożliwia użytkownikom doprecyzowanie treści z zadanego zbioru opcji. Można je zaznaczać i odznaczać. Po zaznaczeniu mogą zawierać ikonę znacznika wyboru.
  • Wejście: informacje podawane przez użytkownika, np. wybory w menu. Mogą zawierać ikonę i tekst oraz przycisk „X” do usunięcia.
  • Sugestia: wyświetla użytkownikowi rekomendacje na podstawie jego ostatniej aktywności lub danych wejściowych. Zazwyczaj pojawiają się pod polem wprowadzania danych, aby zachęcić użytkownika do podjęcia działania.
Przykłady 4 komponentów układu z wyróżnieniem ich unikalnych cech.
Rysunek 1. Cztery komponenty układu.

Interfejs API

Istnieją 4 komponenty odpowiadające 4 typom komponentów. W następnych sekcjach szczegółowo omawiamy te komponenty i ich różnice. Mają jednak wspólne te parametry:

  • label: ciąg znaków, który pojawia się na elemencie.
  • icon: ikona wyświetlana na początku elementu. Niektóre z kompozytowanych komponentów mają oddzielne parametry leadingIcontrailingIcon.
  • onClick: funkcja Lambda wywoływana przez element, gdy użytkownik go naciśnie.

Element pomocy

Komponent AssistChip to prosty sposób na tworzenie elementów pomocy, które kierują użytkownika w określonym kierunku. Jedną z takich funkcji jest parametr leadingIcon, który umożliwia wyświetlanie ikony po lewej stronie elementu. Ten przykład pokazuje, jak to zrobić:

@Composable
fun AssistChipExample() {
    AssistChip(
        onClick = { Log.d("Assist chip", "hello world") },
        label = { Text("Assist chip") },
        leadingIcon = {
            Icon(
                Icons.Filled.Settings,
                contentDescription = "Localized description",
                Modifier.size(AssistChipDefaults.IconSize)
            )
        }
    )
}

Ta implementacja wygląda tak.

Prosty element pomocy.
Rysunek 2. Element załącznika.

Ikona filtra

Komponent FilterChip wymaga śledzenia, czy element jest wybrany. W tym przykładzie pokazujemy, jak wyświetlić ikonę zaznaczonego elementu tylko wtedy, gdy użytkownik go wybierze:

@Composable
fun FilterChipExample() {
    var selected by remember { mutableStateOf(false) }

    FilterChip(
        onClick = { selected = !selected },
        label = {
            Text("Filter chip")
        },
        selected = selected,
        leadingIcon = if (selected) {
            {
                Icon(
                    imageVector = Icons.Filled.Done,
                    contentDescription = "Done icon",
                    modifier = Modifier.size(FilterChipDefaults.IconSize)
                )
            }
        } else {
            null
        },
    )
}

Ta implementacja wygląda tak, gdy nie jest zaznaczona:

Niewybrana ikona filtra bez znacznika i z tłem planu.
Rysunek 3. Niewybrany filtr.

Po wybraniu wygląda tak:

Wybrana ikona filtra z zaznacznikiem i kolorowe tło.
Rysunek 4. Wybrany element filtra.

Element wprowadzania tekstu

Możesz użyć komponentu InputChip, aby tworzyć elementy, które są wynikiem interakcji z użytkownikiem. Na przykład w kliencie poczty, gdy użytkownik pisze e-maila, element wejściowy może reprezentować osobę, której adres został wpisany w polu „do:”.

Poniższa implementacja pokazuje element wejściowy, który jest już wybrany. Użytkownik odrzuca element, gdy go naciśnie.

@Composable
fun InputChipExample(
    text: String,
    onDismiss: () -> Unit,
) {
    var enabled by remember { mutableStateOf(true) }
    if (!enabled) return

    InputChip(
        onClick = {
            onDismiss()
            enabled = !enabled
        },
        label = { Text(text) },
        selected = enabled,
        avatar = {
            Icon(
                Icons.Filled.Person,
                contentDescription = "Localized description",
                Modifier.size(InputChipDefaults.AvatarSize)
            )
        },
        trailingIcon = {
            Icon(
                Icons.Default.Close,
                contentDescription = "Localized description",
                Modifier.size(InputChipDefaults.AvatarSize)
            )
        },
    )
}

Ta implementacja wygląda tak.

Element wejściowy z awatarem i ikoną końcową.
Rysunek 5. Element wprowadzania tekstu.

Element z sugestią

Komponent SuggestionChip jest najprostszym z wymienionych na tej stronie, zarówno pod względem definicji interfejsu API, jak i typowych zastosowań. Elementy sugestii zawierają dynamicznie generowane wskazówki. Na przykład w aplikacji do czatu z AI możesz używać elementów z supozycjami, aby przedstawiać możliwe odpowiedzi na najnowszą wiadomość.

Rozważ implementację SuggestionChip:

@Composable
fun SuggestionChipExample() {
    SuggestionChip(
        onClick = { Log.d("Suggestion chip", "hello world") },
        label = { Text("Suggestion chip") }
    )
}

Ta implementacja wygląda tak:

Prosty element pomocy.
Rysunek 6. Element załącznika.

Element

Wszystkie przykłady w tym dokumencie wykorzystują podstawowe komponenty, które mają płaski wygląd. Jeśli chcesz użyć elementu, który ma podwyższony wygląd, użyj jednego z tych 3 komponentów:

Dodatkowe materiały