Les cases à cocher permettent aux utilisateurs de sélectionner un ou plusieurs éléments dans une liste. Vous pouvez utiliser une case à cocher pour permettre à l'utilisateur d'effectuer les opérations suivantes:
- Activez ou désactivez un élément.
- Faites votre choix parmi plusieurs options dans une liste.
- Indiquez votre accord ou votre acceptation.
Anatomie
Une case à cocher se compose des éléments suivants:
- Box: conteneur de la case à cocher.
- Vérifier: indicateur visuel qui indique si la case à cocher est cochée ou non.
- Libellé: texte décrivant la case à cocher.
États
Une case à cocher peut être associée à l'un des trois états suivants:
- Non cochée: la case n'est pas cochée. Le champ est vide.
- Indéterminé: la case à cocher est dans un état indéterminé. La zone contient un tiret.
- Sélectionné: la case est cochée. La case contient une coche.
L'image suivante illustre les trois états d'une case à cocher.
Implémentation
Vous pouvez utiliser le composable Checkbox
pour créer une case à cocher dans votre application. Il ne reste que quelques paramètres clés à garder à l'esprit:
checked
: valeur booléenne indiquant si la case est cochée ou non.onCheckedChange()
: fonction appelée par l'application lorsque l'utilisateur appuie sur la case à cocher.
L'extrait de code suivant montre comment utiliser le composable Checkbox
:
@Composable fun CheckboxMinimalExample() { var checked by remember { mutableStateOf(true) } Row( verticalAlignment = Alignment.CenterVertically, ) { Text( "Minimal checkbox" ) Checkbox( checked = checked, onCheckedChange = { checked = it } ) } Text( if (checked) "Checkbox is checked" else "Checkbox is unchecked" ) }
Explication
Ce code crée une case qui est initialement décochée. Lorsque l'utilisateur clique sur la case à cocher, le lambda onCheckedChange
met à jour l'état checked
.
Résultat
Cet exemple génère le composant suivant lorsque la case n'est pas cochée:
Voici à quoi ressemble la même case à cocher lorsqu'elle est cochée:
Exemple avancé
Voici un exemple plus complexe d'implémentation de cases à cocher dans votre application. Dans cet extrait, il existe une case à cocher parente et une série de cases à cocher enfants. Lorsque l'utilisateur appuie sur la case à cocher parente, l'application coche toutes les cases enfants.
@Composable fun CheckboxParentExample() { // Initialize states for the child checkboxes val childCheckedStates = remember { mutableStateListOf(false, false, false) } // Compute the parent state based on children's states val parentState = when { childCheckedStates.all { it } -> ToggleableState.On childCheckedStates.none { it } -> ToggleableState.Off else -> ToggleableState.Indeterminate } Column { // Parent TriStateCheckbox Row( verticalAlignment = Alignment.CenterVertically, ) { Text("Select all") TriStateCheckbox( state = parentState, onClick = { // Determine new state based on current state val newState = parentState != ToggleableState.On childCheckedStates.forEachIndexed { index, _ -> childCheckedStates[index] = newState } } ) } // Child Checkboxes childCheckedStates.forEachIndexed { index, checked -> Row( verticalAlignment = Alignment.CenterVertically, ) { Text("Option ${index + 1}") Checkbox( checked = checked, onCheckedChange = { isChecked -> // Update the individual child state childCheckedStates[index] = isChecked } ) } } } if (childCheckedStates.all { it }) { Text("All options selected") } }
Explication
Voici quelques points à retenir de cet exemple:
- Gestion des états :
childCheckedStates
: liste de valeurs booléennes utilisantmutableStateOf()
pour suivre l'état coché de chaque case enfant.parentState
:ToggleableState
dont la valeur dérive des états des cases à cocher enfants.
- Composants de l'interface utilisateur :
TriStateCheckbox
: est nécessaire pour la case à cocher parente, car elle comporte un paramètrestate
qui vous permet de la définir sur "indéterminé".Checkbox
: utilisé pour chaque case à cocher enfant dont l'état est associé à l'élément correspondant danschildCheckedStates
.Text
: affiche les libellés et les messages ("Tout sélectionner", "Option X", "Toutes les options sélectionnées").
- Logique :
- L'
onClick
de la case à cocher parente met à jour toutes les cases à cocher enfants de l'état opposé à l'état parent actuel. - Le
onCheckedChange
de chaque case à cocher enfant met à jour l'état correspondant dans la listechildCheckedStates
. - Le code affiche "
All options selected
" lorsque toutes les cases enfants sont cochées.
- L'
Résultat
Cet exemple génère le composant suivant lorsque toutes les cases à cocher sont décochées.
De même, voici à quoi ressemble le composant lorsque toutes les options sont cochées, comme lorsque l'utilisateur appuie sur "Tout sélectionner" :
Lorsqu'une seule option est cochée, la case à cocher "Parent" affiche l'état indéterminé: