Cele skupienia

Cel zaznaczenia to element interfejsu, do którego można przenieść zaznaczenie klawiatury. Użytkownicy mogą przesuwać zaznaczenie klawiatury za pomocą klawisza Tab lub klawiszy kierunkowych (strzałek):

  • Tab lub Shift+Tab – przenoszenie zaznaczenia do przodu lub do tyłu w jednowymiarowej kolejności wyświetlania.
  • Klawisze kierunkowe – przesuwanie zaznaczenia w 2 wymiarach (w górę, w dół, w lewo i w prawo).

Interaktywne elementy interfejsu są domyślnie celami zaznaczenia

Komponent interaktywny jest domyślnie celem zaznaczenia. Innymi słowy, element interfejsu jest celem zaznaczenia, jeśli użytkownicy mogą go kliknąć.

Rozważmy na przykład 3 komponenty Karta. Jeśli pierwsza i trzecia karta są interaktywne (definiują wywołanie zwrotne onClick), ale druga karta ma charakter wyłącznie informacyjny (nie obsługuje kliknięć), naciśnięcie klawisza Tab na pierwszej karcie spowoduje pominięcie drugiej karty i przejście bezpośrednio do trzeciej.

Card(onClick = { /* First card action */ }) {
    Text("Card 1 (Interactive)")
}
Card {
    Text("Card 2 (Informational - not focusable)")
}
Card(onClick = { /* Third card action */ }) {
    Text("Card 3 (Interactive)")
}

Możesz ustawić drugą kartę jako cel zaznaczenia, podając parametr onClick:

Card(onClick = { /* Second card action */ }) {
    Text("Card 2 (Now interactive and focusable)")
}

Modyfikator clickable zmienia też niestandardowe lub standardowe elementy interfejsu w cele zaznaczenia. Szczegółowe informacje znajdziesz w sekcji Klikanie i naciskanie.

Box(
    modifier = Modifier
        .clickable { /* Handle click */ }
) {
    Text("Custom interactive element")
}

Ustawianie elementu kompozycyjnego jako nieklikalnego celu zaznaczenia

Modyfikator focusable sprawia, że element kompozycyjny jest celem zaznaczenia bez konieczności stosowania semantyki kliknięcia. Użytkownicy mogą przenieść zaznaczenie klawiatury na zmodyfikowany element kompozycyjny (np. aby sprawdzić zawartość za pomocą narzędzi ułatwień dostępu lub przewinąć widoczny obszar), ale naciśnięcie klawisza Enter lub spacji nie powoduje kliknięcia:

Box(
    modifier = Modifier
        .focusable()
) {
    Text("Non-clickable focus target")
}

Ustawianie elementu kompozycyjnego jako nieaktywnego

W niektórych przypadkach możesz chcieć wykluczyć element interaktywny z nawigacji za pomocą klawiatury bez wyłączania zdarzeń kliknięcia lub wskaźnika. Możesz uniemożliwić komponentowi uzyskanie zaznaczenia, ustawiając canFocus = false w modyfikatorze focusProperties:

var checked by remember { mutableStateOf(false) }

Switch(
    checked = checked,
    onCheckedChange = { checked = it },
    // Prevent component from being focused
    modifier = Modifier
        .focusProperties { canFocus = false }
)