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), talvez seja necessário bloquear temporariamente o foco em um único componente e impedir que as teclas Tab ou direcionais naveguem para fora.

Capturar foco

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 está capturado, as teclas padrão de navegação por foco (como Tab) não movem o foco para componentes vizinhos.

Soltar o foco

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

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