Mover e limpar o foco

FocusManager permite mover o foco de forma direcional ou limpar tudo. Use FocusRequester para segmentação direta de componentes. Consulte Solicitar foco de forma programática.

Movimento direcional do foco com o FocusManager

Para mover o foco de forma programática em uma direção relativa:

  1. Acesse a instância FocusManager usando LocalFocusManager.current.
  2. Chame moveFocus() com um valor FocusDirection (Next, Previous, Up, Down, Left, Right, Enter ou Exit).

val focusManager = LocalFocusManager.current

Button(
    onClick = {
        focusManager.moveFocus(FocusDirection.Next)
    }
) {
    Text("Next Field")
}

Foco nítido

Para remover o foco do elemento que o detém no momento (por exemplo, quando o usuário pressiona a tecla Esc), chame clearFocus():

val focusManager = LocalFocusManager.current

Box(
    modifier = Modifier.onPreviewKeyEvent { keyEvent ->
        if (keyEvent.key == Key.Escape && keyEvent.type == KeyEventType.KeyUp) {
            focusManager.clearFocus()
            true
        } else {
            false
        }
    }
)

A função clearFocus() aceita um parâmetro force: Boolean = false opcional:

  • force = false (padrão): respeita os bloqueios de foco e não limpa o foco se o componente ativo tiver foco capturado.
  • force = true: limpa o foco incondicionalmente, mesmo que um componente tenha capturado o foco.