Utilisez un bouton segmenté pour permettre aux utilisateurs de choisir parmi un ensemble d'options côte à côte. Il existe deux types de boutons segmentés :
- Bouton à sélection unique : permet aux utilisateurs de choisir une option.
- Bouton de sélection multiple : permet aux utilisateurs de choisir entre deux et cinq éléments. Pour les choix plus complexes ou pour plus de cinq éléments, utilisez des chips.

Surface d'API
Utilisez les mises en page SingleChoiceSegmentedButtonRow
et MultiChoiceSegmentedButtonRow
pour créer des boutons segmentés. Ces mises en page positionnent et dimensionnent correctement les SegmentedButton
et partagent les paramètres clés suivants :
space
: ajuste le chevauchement entre les boutons.content
: contient le contenu de la ligne de boutons segmentés, qui est généralement une séquence deSegmentedButton
.
Créer un bouton segmenté à sélection unique
Cet exemple montre comment créer un bouton segmenté à sélection unique :
@Composable fun SingleChoiceSegmentedButton(modifier: Modifier = Modifier) { var selectedIndex by remember { mutableIntStateOf(0) } val options = listOf("Day", "Month", "Week") SingleChoiceSegmentedButtonRow { options.forEachIndexed { index, label -> SegmentedButton( shape = SegmentedButtonDefaults.itemShape( index = index, count = options.size ), onClick = { selectedIndex = index }, selected = index == selectedIndex, label = { Text(label) } ) } } }
Points clés concernant le code
- Initialise une variable
selectedIndex
à l'aide deremember
etmutableIntStateOf
pour suivre l'index du bouton sélectionné. - Définit une liste de
options
représentant les libellés des boutons. SingleChoiceSegmentedButtonRow
vous permet de sélectionner un seul bouton.- Crée un
SegmentedButton
pour chaque option, à l'intérieur de la boucleforEachIndexed
:shape
définit la forme du bouton en fonction de son index et du nombre total d'options à l'aide deSegmentedButtonDefaults.itemShape
.onClick
met à jourselectedIndex
avec l'index du bouton sur lequel l'utilisateur a cliqué.selected
définit l'état de sélection du bouton en fonction deselectedIndex
.label
affiche le libellé du bouton à l'aide du composableText
.
Résultat

Créer un bouton segmenté à sélection multiple
Cet exemple montre comment créer un bouton segmenté à choix multiples avec des icônes qui permettent aux utilisateurs de sélectionner plusieurs options :
@Composable fun MultiChoiceSegmentedButton(modifier: Modifier = Modifier) { val selectedOptions = remember { mutableStateListOf(false, false, false) } val options = listOf("Walk", "Ride", "Drive") MultiChoiceSegmentedButtonRow { options.forEachIndexed { index, label -> SegmentedButton( shape = SegmentedButtonDefaults.itemShape( index = index, count = options.size ), checked = selectedOptions[index], onCheckedChange = { selectedOptions[index] = !selectedOptions[index] }, icon = { SegmentedButtonDefaults.Icon(selectedOptions[index]) }, label = { when (label) { "Walk" -> Icon( imageVector = Icons.AutoMirrored.Filled.DirectionsWalk, contentDescription = "Directions Walk" ) "Ride" -> Icon( imageVector = Icons.Default.DirectionsBus, contentDescription = "Directions Bus" ) "Drive" -> Icon( imageVector = Icons.Default.DirectionsCar, contentDescription = "Directions Car" ) } } ) } } }
Points clés concernant le code
- Le code initialise la variable
selectedOptions
à l'aide deremember
etmutableStateListOf
. Cela permet de suivre l'état sélectionné de chaque bouton. - Le code utilise
MultiChoiceSegmentedButtonRow
pour contenir les boutons. - Dans la boucle
forEachIndexed
, le code crée unSegmentedButton
pour chaque option :shape
définit la forme du bouton en fonction de son index et du nombre total d'options.checked
définit l'état coché du bouton en fonction de la valeur correspondante dansselectedOptions
.onCheckedChange
bascule l'état de sélection de l'élément correspondant dansselectedOptions
lorsque l'utilisateur clique sur le bouton.icon
affiche une icône en fonction deSegmentedButtonDefaults.Icon
et de l'état coché du bouton.label
affiche une icône correspondant au libellé, à l'aide de composablesIcon
avec des vecteurs d'image et des descriptions de contenu appropriés.
Résultat

Ressources supplémentaires
- Material 3 : boutons segmentés