Sempre que o foco muda na árvore de composição, o Compose aciona um evento de foco que pode ser observado por modificadores principais e filhos. Você pode usar o modificador
onFocusChanged para detectar transições de estado de foco, consultar as propriedades de foco
atuais e acionar atualizações de interface orientadas por estado.
Observar o estado de foco com onFocusChanged
O modificador onFocusChanged fornece um objeto FocusState sempre que um
elemento ganha ou perde o foco.
Por exemplo, é possível observar mudanças de foco para atualizar o estado do componente personalizado (como mudar a cor da borda de um elemento ou acionar uma animação):
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
Neste exemplo, remember armazena a cor da borda em todas as recomposições, e
a cor da borda é atualizada sempre que o estado de foco do elemento muda.
Propriedades do FocusState
O objeto FocusState transmitido para onFocusChanged fornece três propriedades principais:
isFocused: retornatruese o elemento combinável específico a que este modificador está anexado tiver o foco de entrada ativo no momento.hasFocus: retornatruese esse elemento combinável ou qualquer um dos elementos combináveis filhos estiver em foco. Isso é útil para contêineres principais (como cards ou barras de ferramentas) que precisam saber quando um elemento filho está ativo.isCaptured: retornatruese o foco estiver bloqueado no elemento (por exemplo, durante subinterações modais usandocaptureFocus()). Enquanto capturado, tentar mover o foco para outros elementos não limpa o foco.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Segmentações por foco
- Indicar estado de foco
- Solicitar o foco de maneira programática
- Capturar e liberar o foco