Solicitar o foco de maneira programática

Em alguns fluxos do usuário, o aplicativo precisa mover explicitamente o foco para um componente específico. Por exemplo, quando um usuário clica em um botão "Pesquisar", talvez você queira colocar o foco automaticamente no campo de entrada de pesquisa.

Usar o FocusRequester

Para solicitar o foco explicitamente:

  1. Crie e lembre-se de uma instância de FocusRequester: val focusRequester = remember { FocusRequester() }.
  2. Anexe o FocusRequester ao elemento combinável de destino usando o modificador focusRequester.
  3. Chame requestFocus() dentro de um callback de evento (como onClick) ou de um escopo de corrotina.

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")
}

Definir o foco inicial da tela

Para colocar o foco inicial em um componente específico quando uma tela aparece pela primeira vez, acionar requestFocus() dentro de um LaunchedEffect(Unit):

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Ao navegar entre contêineres ou retornar de outra tela, você também pode anexar focusRestorer() aos contêineres pai para retornar automaticamente o foco ao último filho focado. Para mais informações, consulte o guia Restaurar o foco.