Fournir des repères visuels pour une visualisation plus facile de la concentration
Tous les éléments sélectionnables du thème Material ont déjà un style de focus qui correspond au thème, vous devrez peut-être ajouter des éléments visuels pour élément ciblé plus facile à repérer. Une bonne solution serait de modifier la bordure du votre élément avec une couleur qui offre un bon contraste avec l'arrière-plan:
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
Dans cet exemple, remember
permet de stocker la couleur de la bordure
les recompositions, et le contour de l'élément est mis à jour chaque fois que l'élément
gagne ou perd sa concentration.
Implémentez des repères visuels avancés
Avec Jetpack Compose, vous pouvez également créer des visuels plus sophistiqués et avancés qui correspondent mieux à votre interface utilisateur.
- Commencez par créer un
IndicationInstance
qui dessine visuellement le repère que vous souhaitez dans votre interface utilisateur:private class MyHighlightIndicationInstance(isEnabledState: State<Boolean>) : IndicationInstance { private val isEnabled by isEnabledState override fun ContentDrawScope.drawIndication() { drawContent() if (isEnabled) { drawRect(size = size, color = Color.White, alpha = 0.2f) } } }
- Ensuite, créez un
Indication
et mémorisez l'état sélectionné:class MyHighlightIndication : Indication { @Composable override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance { val isFocusedState = interactionSource.collectIsFocusedAsState() return remember(interactionSource) { MyHighlightIndicationInstance(isEnabledState = isFocusedState) } } }
- Ajoutez
Indication
etInteractionSource
à l'interface utilisateur via le modificateurindication()
:val highlightIndication = remember { MyHighlightIndication() } var interactionSource = remember { MutableInteractionSource() } Card( modifier = Modifier .clickable( interactionSource = interactionSource, indication = highlightIndication, enabled = true, onClick = { } ) ) {}
Comprendre l'état de la mise au point
En règle générale, chaque fois qu'un état de sélection change, une FocusEvent
est déclenchée.
l'arborescence, et les parents d'un modificateur focusable()
peuvent l'écouter à l'aide de la
Modificateur onFocusChanged()
.
Si vous avez besoin de connaître l'état d'avancement,vous pouvez utiliser ces API conjointement
avec le modificateur onFocusChanged
:
isFocused
renvoietrue
si le composable auquel le modificateur est associé ciblehasFocus
fonctionne de la même manière queisFocused
, mais avec une différence importante: au lieu de vérifier uniquement l'état actuel, il vérifie si l'élément ou l'un de ses enfants est concentréisCaptured
renvoietrue
chaque fois que l'élément d'interface actif est le focus. Cela se produit, par une instance, lorsqu'unTextField
contient des données incorrectes, de sorte que le fait de tenter de et les autres éléments n'effacent pas le curseur.
Ces champs sont présentés ci-dessous:
Modifier.onFocusChanged {
val isFocused = it.isFocused
val hasFocus = it.hasFocus
val isCaptured= it.isCaptured
}
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Modifier le comportement de mise au point
- Material Design 2 dans Compose
- Gérer les entrées utilisateur