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 :
- Activer ou désactiver un élément.
- Sélectionner plusieurs options dans une liste.
- Indiquer son accord ou son acceptation.
Anatomie
Une case à cocher se compose des éléments suivants :
- Case : conteneur de la case à cocher.
- Coche : indicateur visuel indiquant si la case à cocher est sélectionnée ou non.
- Libellé : texte décrivant la case à cocher.
États
Une case à cocher peut avoir l'un des trois états suivants :
- Non sélectionnée : la case à cocher n'est pas sélectionnée. La case est vide.
- Indéterminée : la case à cocher est dans un état indéterminé. La case contient un tiret.
- Sélectionnée : la case à cocher est sélectionnée. La case contient une coche.
L'image suivante illustre les trois états d'une case à cocher.
Implémentation
Vous pouvez utiliser le Checkbox composable pour créer une case à cocher dans votre application.
Voici quelques paramètres clés à retenir :
checked: valeur booléenne indiquant si la case à cocher est cochée ou non.onCheckedChange(): fonction que l'application appelle lorsque l'utilisateur appuie sur la case à cocher.
L'extrait 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 à cocher qui n'est pas cochée au départ. 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 lorsqu'il n'est pas coché :
Voici comment la même case à cocher apparaît lorsqu'elle est cochée :
Exemple avancé
Voici un exemple plus complexe d'implémentation de cases à cocher dans votre application. Dans cet extrait, une case à cocher parent et une série de cases à cocher enfants sont présentes. Lorsque l'utilisateur appuie sur la case à cocher parent, l'application coche toutes les cases à cocher 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 plusieurs points à noter dans cet exemple :
- Gestion des états:
childCheckedStates: liste de valeurs booléennes utilisantmutableStateOf()pour suivre l'état coché de chaque case à cocher enfant.parentState:ToggleableStatedont la valeur dérive des états des cases à cocher enfants.
- Composants d'interface utilisateur:
TriStateCheckbox: nécessaire pour la case à cocher parent, car elle comporte un paramètrestatequi vous permet de la définir sur indéterminé.Checkbox: utilisé pour chaque case à cocher enfant, son état étant lié à l'élément correspondant danschildCheckedStates.Text: affiche des libellés et des messages ("Tout sélectionner", "Option X", "Toutes les options sélectionnées").
- Logique:
onClickde la case à cocher parent met à jour toutes les cases à cocher enfants sur l'opposé de l'état parent actuel.onCheckedChangede chaque case à cocher enfant met à jour son état correspondant dans la listechildCheckedStates.- Le code affiche "
All options selected" lorsque toutes les cases à cocher enfants sont cochées.
Résultat
Cet exemple génère le composant suivant lorsque toutes les cases à cocher sont décochées.
De même, voici comment le composant apparaît 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é :