आइकॉन बटन, ऐसी कार्रवाइयां दिखाते हैं जिन्हें उपयोगकर्ता कर सकते हैं. आइकॉन बटन में ऐसे आइकॉन का इस्तेमाल करना चाहिए जिसका मतलब साफ़ तौर पर पता चलता हो. आम तौर पर, इन बटन में सामान्य या अक्सर इस्तेमाल की जाने वाली कार्रवाइयों को दिखाया जाता है.
आइकॉन बटन दो तरह के होते हैं:
- डिफ़ॉल्ट: ये बटन, मेन्यू या खोज जैसे अन्य एलिमेंट खोल सकते हैं.
- टॉगल: ये बटन, बाइनरी ऐक्शन दिखा सकते हैं. इन ऐक्शन को टॉगल करके चालू या बंद किया जा सकता है. जैसे, "पसंदीदा" या "बुकमार्क".
एपीआई का प्लैटफ़ॉर्म
स्टैंडर्ड आइकॉन बटन लागू करने के लिए, IconButton कॉम्पोज़ेबल का इस्तेमाल करें. भरी हुई, भरी हुई टोन वाली या आउटलाइन वाली जैसी अलग-अलग विज़ुअल स्टाइल बनाने के लिए, FilledIconButton, FilledTonalIconButton, और OutlinedIconButton का इस्तेमाल करें.
IconButton के मुख्य पैरामीटर में ये शामिल हैं:
onClick: यह एक Lambda फ़ंक्शन है, जो आइकॉन बटन पर टैप करने पर काम करता है.enabled: बटन के चालू होने की स्थिति को कंट्रोल करने वाला बूलियन.falseहोने पर, बटन उपयोगकर्ता के इनपुट का जवाब नहीं देता.content: बटन में मौजूद कॉम्पोज़ेबल कॉन्टेंट, आम तौर परIcon.
बुनियादी उदाहरण: टॉगल आइकॉन बटन
इस उदाहरण में, टॉगल आइकॉन बटन को लागू करने का तरीका बताया गया है. टॉगल आइकॉन बटन, चुने जाने या न चुने जाने के आधार पर अपना रंग बदलता है.
@Preview @Composable fun ToggleIconButtonExample() { // isToggled initial value should be read from a view model or persistent storage. var isToggled by rememberSaveable { mutableStateOf(false) } IconButton( onClick = { isToggled = !isToggled } ) { Icon( painter = if (isToggled) painterResource(R.drawable.favorite_filled) else painterResource(R.drawable.favorite), contentDescription = if (isToggled) "Selected icon button" else "Unselected icon button." ) } }
कोड के बारे में अहम जानकारी
ToggleIconButtonExampleकंपोज़ेबल, टॉगल किए जा सकने वालेIconButtonके बारे में बताता है.mutableStateOf(false),MutableStateऑब्जेक्ट बनाता है, जिसमें शुरू मेंfalseवाली बूलियन वैल्यू होती है. इससेisToggledएक स्टेट होल्डर बन जाता है. इसका मतलब है कि जब भी इसकी वैल्यू बदलती है, तब Compose यूज़र इंटरफ़ेस (यूआई) को फिर से बनाता है.rememberSaveableयह पक्का करता है कि कॉन्फ़िगरेशन में होने वाले बदलावों के बावजूद,isToggledकी स्थिति में कोई बदलाव न हो. जैसे, स्क्रीन घुमाना.
IconButtonकाonClickलैम्ब्डा, बटन पर क्लिक करने पर उसके व्यवहार के बारे में बताता है. यहtrueऔरfalseके बीच स्थिति को टॉगल करता है.Iconकॉम्पोज़ेबल केpainterपैरामीटर में,isToggledस्थिति के आधार पर, शर्त के मुताबिक कोई दूसराpainterResourceलोड होता है. इससे आइकॉन का विज़ुअल बदल जाता है.- अगर
isToggled,trueहै, तो यह भरे हुए दिल वाला ड्रॉबल लोड करता है. - अगर
isToggled,falseहै, तो यह दिल के आकार का ड्रॉबल लोड करता है.
- अगर
- सुलभता से जुड़ी सही जानकारी देने के लिए,
IconकाcontentDescriptionभीisToggledकी स्थिति के आधार पर अपडेट होता है.
नतीजा
इस इमेज में, टॉगल आइकॉन बटन को चुने हुए के बजाय, पहले वाले स्निपेट में दिखाया गया है:
बेहतर उदाहरण: दबाने पर बार-बार होने वाली कार्रवाइयां
इस सेक्शन में, ऐसे आइकॉन बटन बनाने का तरीका बताया गया है जो हर क्लिक पर सिर्फ़ एक बार ऐक्शन ट्रिगर करने के बजाय, उपयोगकर्ता के उन्हें दबाकर रखने पर लगातार ऐक्शन ट्रिगर करते हैं.
@Composable fun MomentaryIconButton( unselectedImage: Int, selectedImage: Int, contentDescription: String, modifier: Modifier = Modifier, stepDelay: Long = 100L, // Minimum value is 1L milliseconds. onClick: () -> Unit ) { val interactionSource = remember { MutableInteractionSource() } val isPressed by interactionSource.collectIsPressedAsState() val pressedListener by rememberUpdatedState(onClick) LaunchedEffect(isPressed) { while (isPressed) { delay(stepDelay.coerceIn(1L, Long.MAX_VALUE)) pressedListener() } } IconButton( modifier = modifier, onClick = onClick, interactionSource = interactionSource ) { Icon( painter = if (isPressed) painterResource(id = selectedImage) else painterResource(id = unselectedImage), contentDescription = contentDescription, ) } }
कोड के बारे में अहम जानकारी
MomentaryIconButton, बटन दबाए जाने पर आइकॉन के लिएunselectedImage: Int, ड्रॉबल संसाधन आईडी और बटन दबाए जाने पर आइकॉन के लिएselectedImage: Int, ड्रॉबल संसाधन आईडी लेता है.- यह उपयोगकर्ता के "दबाव" वाले इंटरैक्शन को ट्रैक करने के लिए,
interactionSourceका इस्तेमाल करता है. - बटन को दबाने पर
isPressedकी वैल्यू true होती है और बटन को न दबाने पर वैल्यू false होती है. जबisPressedtrueहो, तोLaunchedEffectएक लूप में चला जाता है.- इस लूप में, ट्रिगर करने वाली कार्रवाइयों के बीच में रुकावटें बनाने के लिए,
delay(stepDelayके साथ) का इस्तेमाल किया जाता है.coerceInयह पक्का करता है कि इंफ़ाइनाइट लूप को रोकने के लिए, देरी कम से कम 1 मिलीसेकंड हो. pressedListenerको लूप में हर देरी के बाद कॉल किया जाता है. इससे कार्रवाई दोहराई जाती है.
- इस लूप में, ट्रिगर करने वाली कार्रवाइयों के बीच में रुकावटें बनाने के लिए,
pressedListener,rememberUpdatedStateका इस्तेमाल करके यह पक्का करता है किonClickलैम्ब्डा (कार्रवाई) हमेशा सबसे नई कॉम्पोज़िशन से अप-टू-डेट हो.Icon, बटन दबाया गया है या नहीं, इस आधार पर अपनी इमेज बदलता है.- अगर
isPressedसही है, तोselectedImageदिखता है. - ऐसा न होने पर,
unselectedImageदिखता है.
- अगर
इसके बाद, इस MomentaryIconButton का इस्तेमाल किसी उदाहरण में करें. यहां दिए गए स्निपेट में, एक काउंटर को कंट्रोल करने वाले दो आइकॉन बटन दिखाए गए हैं:
@Preview() @Composable fun MomentaryIconButtonExample() { var pressedCount by remember { mutableIntStateOf(0) } Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { MomentaryIconButton( unselectedImage = R.drawable.fast_rewind, selectedImage = R.drawable.fast_rewind_filled, stepDelay = 100L, onClick = { pressedCount -= 1 }, contentDescription = "Decrease count button" ) Spacer(modifier = Modifier) Text("advanced by $pressedCount frames") Spacer(modifier = Modifier) MomentaryIconButton( unselectedImage = R.drawable.fast_forward, selectedImage = R.drawable.fast_forward_filled, contentDescription = "Increase count button", stepDelay = 100L, onClick = { pressedCount += 1 } ) } }
कोड के बारे में अहम जानकारी
MomentaryIconButtonExampleकॉम्पोज़ेबल, एकRowदिखाता है जिसमें दोMomentaryIconButtonइंस्टेंस और एकTextकॉम्पोज़ेबल होता है. इससे काउंटर को बढ़ाने और घटाने के लिए यूज़र इंटरफ़ेस (यूआई) बनाया जाता है.- यह
rememberऔरmutableIntStateOfका इस्तेमाल करके,pressedCountबदले जा सकने वाले स्टेटस वैरिएबल को बनाए रखता है. इसे 0 पर शुरू किया जाता है. जबpressedCountमें बदलाव होता है, तो उसे देखते हुए बने सभी कॉम्पोज़ेबल (जैसे,Textकॉम्पोज़ेबल) फिर से कॉम्पोज़ हो जाते हैं, ताकि नई वैल्यू दिख सके. - पहले
MomentaryIconButtonपर क्लिक करने या उसे दबाकर रखने पर,pressedCountकम हो जाता है. - दूसरे
MomentaryIconButtonपर क्लिक करने या उसे दबाकर रखने पर,pressedCountबढ़ जाता है. - दोनों बटन 100 मिलीसेकंड के
stepDelayका इस्तेमाल करते हैं. इसका मतलब है कि बटन को दबाए रखने पर,onClickकार्रवाई हर 100 मिलीसेकंड में दोहराई जाती है.
नतीजा
इस वीडियो में, आइकॉन बटन और काउंटर के साथ यूज़र इंटरफ़ेस (यूआई) दिखाया गया है: