כדאי להשתמש בלחצן מחולק כדי לאפשר למשתמשים לבחור מתוך קבוצת אפשרויות שמוצגות זו לצד זו. יש שני סוגים של לחצנים עם פילוח:
- לחצן בחירה יחידה: מאפשר למשתמשים לבחור אפשרות אחת.
- לחצן בחירה מרובה: מאפשר למשתמשים לבחור בין שני פריטים לחמישה פריטים. כדי לבחור אפשרויות מורכבות יותר או יותר מחמישה פריטים, משתמשים בצ'יפים.
משטח API
אפשר להשתמש בפריסות SingleChoiceSegmentedButtonRow ו-MultiChoiceSegmentedButtonRow כדי ליצור לחצנים עם פלחים. הפריסות האלה קובעות את המיקום והגודל של SegmentedButton בצורה נכונה, ומשתפות את הפרמטרים החשובים הבאים:
-
space: משנה את החפיפה בין הלחצנים. -
content: מכיל את התוכן של השורה של הלחצנים המופרדים, שבדרך כלל מורכב מרצף שלSegmentedButtons.
יצירת כפתור פילוח עם אפשרות בחירה אחת
בדוגמה הזו מוצג איך ליצור לחצן פילוח עם אפשרות בחירה אחת:
@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) } ) } } }
נקודות עיקריות לגבי הקוד
- מאתחלים את המשתנה
selectedIndexבאמצעותrememberו-mutableIntStateOfכדי לעקוב אחרי האינדקס של הלחצן שנבחר. - מגדירה רשימה של
optionsשמייצגת את תוויות הלחצנים. SingleChoiceSegmentedButtonRowמאפשר לבחור רק כפתור אחד.- יוצרת
SegmentedButtonלכל אפשרות, בתוך הלולאהforEachIndexed:-
shapeמגדיר את צורת הלחצן על סמך האינדקס שלו והספירה הכוללת של האפשרויות באמצעותSegmentedButtonDefaults.itemShape. -
onClickupdatesselectedIndexעם האינדקס של הלחצן שנלחץ. -
selectedמגדיר את מצב הבחירה של הלחצן על סמךselectedIndex. -
labelמציג את התווית של הלחצן באמצעות הקומפוזביליText.
-
התוצאה
יצירת כפתור פילוח עם אפשרות לבחירה מרובה
בדוגמה הזו מוצג אופן היצירה של לחצן מפולח עם סמלים שמאפשר למשתמשים לבחור כמה אפשרויות:
@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" ) } } ) } } }
נקודות עיקריות לגבי הקוד
- הקוד מאתחל את המשתנה
selectedOptionsבאמצעותrememberו-mutableStateListOf. המאפיין הזה עוקב אחרי המצב הנבחר של כל לחצן. - הקוד משתמש בתג
MultiChoiceSegmentedButtonRowכדי להכיל את הלחצנים. - בתוך לולאת
forEachIndexed, הקוד יוצרSegmentedButtonלכל אפשרות:-
shapeמגדיר את צורת הלחצן על סמך האינדקס שלו והמספר הכולל של האפשרויות. -
checkedמגדיר את מצב הסימון של הלחצן על סמך הערך התואם ב-selectedOptions. -
onCheckedChangeמעביר את הפריט התואם ב-selectedOptionsלמצב שנבחר או למצב שלא נבחר כשלוחצים על הלחצן. -
iconמציג סמל על סמךSegmentedButtonDefaults.Iconוהמצב המסומן של הלחצן. -
labelמציג סמל שמתאים לתווית, באמצעות רכיבים קומפוזביליים שלIconעם וקטורים מתאימים של תמונות ותיאורי תוכן.
-
התוצאה
מקורות מידע נוספים
- Material 3: Segmented buttons