Acquisisci e rilascia lo stato attivo

In modalità di interazione specializzate (ad esempio un canvas di disegno incorporato, una superficie del controller di gioco o una finestra di dialogo di input modale), la tua app potrebbe dover bloccare temporaneamente lo stato attivo su un singolo componente e impedire la navigazione tramite i tasti Tab o direzionali.

Acquisizione della messa a fuoco

Per acquisire lo stato attivo, richiama captureFocus() su un FocusRequester:

val focusRequester = remember { FocusRequester() }

Box(
    modifier = Modifier
        .focusRequester(focusRequester)
        .focusable()
        .onFocusChanged { focusState ->
            if (focusState.isFocused) {
                focusRequester.captureFocus()
            }
        }
)

Mentre lo stato attivo è acquisito, i tasti di navigazione standard (ad esempio Tab) non spostano lo stato attivo sui componenti vicini.

Strategia incentrata sul lancio

Per uscire dallo stato di acquisizione e ripristinare la normale navigazione per stato attivo nell'intera UI, chiama freeFocus():

IconButton(
    onClick = {
        focusRequester.freeFocus()
    }
) {
    Icon(Icons.Default.Close, contentDescription = "Exit focus lock")
}