Richiedere il focus in modo programmatico

In alcuni flussi utente, l'applicazione deve spostare esplicitamente lo stato attivo su un componente specifico. Ad esempio, quando un utente fa clic su un pulsante "Cerca", potresti voler spostare automaticamente lo stato attivo sul campo di immissione della ricerca.

Utilizzare FocusRequester

Per richiedere esplicitamente la messa a fuoco:

  1. Crea e memorizza un'istanza FocusRequester: val focusRequester = remember { FocusRequester() }.
  2. Collega FocusRequester al componibile di destinazione utilizzando il modificatore focusRequester.
  3. Chiama requestFocus() all'interno di un callback dell'evento (ad esempio onClick) o di un ambito di coroutine.

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

Impostare lo stato attivo della schermata iniziale

Per impostare lo stato attivo iniziale su un componente specifico quando viene visualizzata una schermata, attiva requestFocus() all'interno di un LaunchedEffect(Unit):

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Quando navighi tra i contenitori o torni da un'altra schermata, puoi anche collegare focusRestorer() ai contenitori principali per riportare automaticamente lo stato attivo sull'ultimo elemento secondario selezionato. Per ulteriori informazioni, consulta la guida Ripristinare la messa a fuoco.