सेगमेंट वाला बटन

सेगमेंट वाले बटन का इस्तेमाल करके, उपयोगकर्ताओं को विकल्पों के सेट में से चुनने की सुविधा दें. सेगमेंट किए गए बटन दो तरह के होते हैं:

  • एक विकल्प चुनने वाला बटन: इससे उपयोगकर्ता एक विकल्प चुन सकते हैं.
  • एक से ज़्यादा विकल्प चुनने की सुविधा देने वाला बटन: इससे उपयोगकर्ता, दो से पांच आइटम चुन सकते हैं. ज़्यादा जटिल विकल्पों या पांच से ज़्यादा आइटम के लिए, चिप्स का इस्तेमाल करें.
सेगमेंट किए गए बटन का कॉम्पोनेंट दिखाया गया है. पहले बटन से एक विकल्प चुना जा सकता है, जबकि दूसरे बटन से कई विकल्प चुने जा सकते हैं.
पहली इमेज. एक विकल्प चुनने वाला बटन (1) और कई विकल्प चुनने वाला बटन (2).

एपीआई सरफ़ेस

सेगमेंट किए गए बटन बनाने के लिए, 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) }
            )
        }
    }
}

कोड के बारे में अहम बातें

  • चुने गए बटन इंडेक्स को ट्रैक करने के लिए, remember और mutableIntStateOf का इस्तेमाल करके, selectedIndex वैरिएबल को शुरू करता है.
  • यह options की सूची तय करता है, जो बटन के लेबल दिखाती है.
  • SingleChoiceSegmentedButtonRow में सिर्फ़ एक बटन चुना जा सकता है.
  • forEachIndexed लूप के अंदर, हर विकल्प के लिए एक SegmentedButton बनाता है:
    • 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"
                        )
                    }
                }
            )
        }
    }
}

कोड के बारे में अहम बातें

  • कोड, remember और mutableStateListOf का इस्तेमाल करके, selectedOptions वैरिएबल को शुरू करता है. इससे हर बटन की चुनी गई स्थिति को ट्रैक किया जाता है.
  • कोड में बटन शामिल करने के लिए, MultiChoiceSegmentedButtonRow का इस्तेमाल किया जाता है.
  • forEachIndexed लूप के अंदर, कोड हर विकल्प के लिए एक SegmentedButton बनाता है:
    • shape, बटन के इंडेक्स और विकल्पों की कुल संख्या के आधार पर, बटन का आकार तय करता है.
    • checked, selectedOptions में मौजूद वैल्यू के आधार पर, बटन की 'चुनी गई' स्थिति सेट करता है.
    • बटन पर क्लिक करने पर, onCheckedChange selectedOptions में मौजूद आइटम की चुनी गई स्थिति को टॉगल करता है.
    • icon, SegmentedButtonDefaults.Icon और बटन की चुनी गई स्थिति के आधार पर एक आइकॉन दिखाता है.
    • label, लेबल के हिसाब से आइकॉन दिखाता है. इसके लिए, वह सही इमेज वेक्टर और कॉन्टेंट के ब्यौरे के साथ Icon कंपोज़ेबल का इस्तेमाल करता है.

नतीजा

एक सेगमेंटेड बटन कॉम्पोनेंट दिखाया गया है. इसमें पैदल, राइड, और ड्राइव के विकल्प हैं. फ़िलहाल, पैदल चलने और राइड के विकल्प चुने गए हैं.
तीसरी इमेज. एक से ज़्यादा विकल्प चुनने की सुविधा देने वाला सेगमेंटेड बटन, जिसमें दो विकल्प चुने गए हैं.

अन्य संसाधन