از دکمه بخشبندیشده استفاده کنید تا کاربران بتوانند از بین مجموعهای از گزینهها که کنار هم قرار دارند انتخاب کنند. دو نوع دکمه بخشبندیشده وجود دارد:
- دکمه تکانتخابی: به کاربران اجازه میدهد یک گزینه را انتخاب کنند.
- دکمه چندانتخابی: به کاربران اجازه میدهد بین دو تا پنج مورد را انتخاب کنند. برای انتخابهای پیچیدهتر یا بیشاز پنج مورد، از تراشهها استفاده کنید.
سطح میانای برنامهسازی کاربردی
از چیدمانهای 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( painter = rememberVectorPainter(AppIcons.DirectionsWalk), contentDescription = "Directions Walk" ) "Ride" -> Icon( painter = rememberVectorPainter(AppIcons.DirectionsBus), contentDescription = "Directions Bus" ) "Drive" -> Icon( painter = rememberVectorPainter(AppIcons.DirectionsCar), contentDescription = "Directions Car" ) } } ) } } }
نکات کلیدی درباره کد
- کد متغیر
selectedOptionsرا بااستفاده ازrememberوmutableStateListOfمقداردهی اولیه میکند. این گزینه وضعیت انتخابشده هر دکمه را ردیابی میکند. - کد از
MultiChoiceSegmentedButtonRowبرای گنجاندن دکمهها استفاده میکند. - درون حلقه
forEachIndexed، کد یکSegmentedButtonبرای هر گزینه ایجاد میکند:shapeشکل دکمه را براساس نمایه آن و تعداد کل گزینهها تعریف میکند.checkedوضعیت علامتگذاری دکمه را براساس مقدار متناظر درselectedOptionsتنظیم میکند.onCheckedChangeوضعیت انتخابشده مورد مربوطه را درselectedOptionsوقتی روی دکمه کلیک میشود، تغییر میدهد.iconنمادی را براساسSegmentedButtonDefaults.Iconو وضعیت علامتگذاریشده دکمه نمایش میدهد.-
labelنمادی را که با برچسب مطابقت دارد نمایش میدهد، بااستفاده از ترکیبپذیرهایIconبا بردار تصویر و شرح محتوای مناسب.
نتیجه
منابع بیشتر
- Material 3: دکمههای بخشبندیشده