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.

Utilizza FocusRequester

Per richiedere esplicitamente lo stato attivo:

  1. Crea e memorizza un'istanza FocusRequester: val focusRequester = remember { FocusRequester() }.
  2. Collega FocusRequester al composable di destinazione utilizzando il modificatore focusRequester.
  3. Chiama requestFocus() all'interno di un callback di 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")
}

Imposta lo stato attivo iniziale dello schermo

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

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Quando navighi tra i container o torni da un'altra schermata, puoi anche collegare focusRestorer() ai container principali per riportare automaticamente lo stato attivo all'ultimo elemento secondario attivo. Per saperne di più, consulta la guida Ripristina lo stato attivo.