Capturar e liberar o foco

Em modos de interação especializados (como uma tela de desenho incorporada, uma superfície de controle de jogo ou uma caixa de diálogo de entrada modal), o app pode precisar bloquear temporariamente o foco em um único componente e impedir que as teclas Tab ou direcionais saiam da navegação.

Foco de captura

Para capturar o foco, invoque captureFocus() em um FocusRequester:

val focusRequester = remember { FocusRequester() }

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

Enquanto o foco é capturado, as teclas de navegação de foco padrão (como Tab) não movem o foco para componentes vizinhos.

Liberar o foco

Para sair do estado capturado e restaurar a navegação de foco normal na interface, chame freeFocus():

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