از دکمه بخشبندیشده استفاده کنید تا به کاربران اجازه دهید از مجموعهای از گزینهها، در کنار هم، انتخاب کنند. دو نوع دکمه بخشبندیشده وجود دارد:
- دکمه انتخاب تکی: به کاربران امکان میدهد یک گزینه را انتخاب کنند.
- دکمه چندانتخابی: به کاربران امکان میدهد بین دو تا پنج مورد را انتخاب کنند. برای انتخابهای پیچیدهتر یا بیشاز پنج مورد، از تراشهها استفاده کنید.
سطح میانای برنامهسازی کاربردی
از چیدمانهای SingleChoiceSegmentedButtonRow و
MultiChoiceSegmentedButtonRow برای ایجاد دکمههای بخشبندیشده استفاده کنید. این چیدمانها
SegmentedButtons را بهدرستی در موقعیت و اندازه قرار میدهند،
و پارامترهای کلیدی زیر را همرسانی میکنند:
space: همپوشانی بین دکمهها را تنظیم میکند.content: حاوی محتوای ردیف دکمه بخشبندیشده است که معمولاً توالیSegmentedButtonاست.
ایجاد دکمه بخشبندیشده تکانتخابی
این مثال نشان میدهد که چگونه میتوان دکمه بخشبندیشده تکانتخابی ایجاد کرد:
@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تعریف میکند.-
onClickبا نمایه دکمه کلیکشده بهروز میشودselectedIndex. 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: دکمههای بخشبندیشده