<पी> जब मैंने जेटपैक कंपोज़ के बारे में अपना आखिरी लेख लिखा था, तो मैंने वहां कहा था कि जेटपैक कंपोज़ में कुछ (मेरी राय में) बुनियादी घटकों की कमी है, और उनमें से एक टूलटिप है। <पी> उस समय, टूलटिप्स प्रदर्शित करने के लिए कोई अंतर्निहित कंपोज़ेबल नहीं था और कई वैकल्पिक समाधान ऑनलाइन मौजूद थे। उन समाधानों के साथ समस्या यह थी कि एक बार जेटपैक कंपोज़ ने नए संस्करण जारी कर दिए, तो वे समाधान टूट सकते थे। इसलिए यह आदर्श नहीं था और समुदाय को उम्मीद थी कि भविष्य में कभी-कभी टूलटिप्स के लिए समर्थन जोड़ा जाएगा। <पी> मुझे यह कहते हुए खुशी हो रही है कि कंपोज़ मटेरियल 3 के संस्करण 1.1.0 के बाद से, अब हमने टूलटिप समर्थन बनाया है। 👏 <पी> हालाँकि यह अपने आप में बहुत बढ़िया है, उस संस्करण को रिलीज़ हुए एक वर्ष से अधिक समय बीत चुका है। और बाद के संस्करणों के साथ, टूलटिप्स से संबंधित एपीआई में भी भारी बदलाव आया। <पी> यदि आप चेंजलॉग पर जाएं, तो आप देखेंगे कि सार्वजनिक और आंतरिक एपीआई कैसे बदल गए हैं। तो ध्यान रखें, कि जब आप इस लेख को पढ़ेंगे, तो चीजें बदलती रहेंगी क्योंकि टूलटिप्स से संबंधित हर चीज अभी भी एनोटेशन ExperimentalMaterial3Api::class द्वारा चिह्नित है। . <पी> ❗️ इस लेख के लिए प्रयुक्त सामग्री 3 का संस्करण 1.2.1 है, जो 6 मार्च 2024 को जारी किया गया था <पी> अब हमारे पास दो अलग-अलग प्रकार के टूलटिप्स के लिए समर्थन है: - <पी> सादा टूलटिप
- <पी> रिच मीडिया टूलटिप
सादा टूलटिप
<पी> आप किसी आइकन बटन के बारे में जानकारी प्रदान करने के लिए पहले प्रकार का उपयोग कर सकते हैं जो अन्यथा स्पष्ट नहीं होगा। उदाहरण के लिए, आप किसी उपयोगकर्ता को यह बताने के लिए एक सादे टूलटिप का उपयोग कर सकते हैं कि आइकन बटन क्या दर्शाता है। <पी>
<पी> अपने एप्लिकेशन में टूलटिप जोड़ने के लिए, आप टूलटिपबॉक्स का उपयोग करते हैं रचनायोग्य. यह रचना कई तर्क लेती है: fun TooltipBox(
positionProvider: PopupPositionProvider,
tooltip: @Composable TooltipScope.() -> Unit,
state: TooltipState,
modifier: Modifier = Modifier,
focusable: Boolean = true,
enableUserInput: Boolean = true,
content: @Composable () -> Unit,
)
<पी> यदि आपने पहले कंपोज़ेबल्स का उपयोग किया है तो इनमें से कुछ से आपको परिचित होना चाहिए। मैं यहां उन पर प्रकाश डालूंगा जिनका विशिष्ट उपयोग मामला है: - <पी> पोजीशनप्रोवाइडर - पॉपअपपोजिशनप्रोवाइडर का प्रकार, और टूलटिप की स्थिति की गणना करने के लिए उपयोग किया जाता है।
- <पी> टूलटिप - यह वह जगह है जहां आप यूआई डिज़ाइन कर सकते हैं कि टूलटिप कैसा दिखेगा।
- <पी> राज्य - यह वह राज्य रखता है जो एक विशिष्ट टूलटिप इंस्टेंस से जुड़ा होता है। यह टूलटिप को दिखाने/खारिज करने जैसे तरीकों को उजागर करता है और किसी एक उदाहरण को इंस्टेंट करते समय, आप यह घोषित कर सकते हैं कि टूलटिप लगातार बनी रहनी चाहिए या नहीं (मतलब यह तब तक स्क्रीन पर प्रदर्शित होती रहनी चाहिए जब तक कोई उपयोगकर्ता टूलटिप के बाहर क्लिक कार्रवाई नहीं करता)।
- <पी> सामग्री - यह यूआई है जिसे टूलटिप ऊपर/नीचे प्रदर्शित करेगा।
<पी> यहां बेसिकटूलटिपबॉक्स को इंस्टेंट करने का एक उदाहरण दिया गया है सभी प्रासंगिक तर्कों के साथ: @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
@Composable
fun BasicTooltip() {
val tooltipPosition = TooltipDefaults.rememberPlainTooltipPositionProvider()
val tooltipState = rememberBasicTooltipState(isPersistent = false)
BasicTooltipBox(positionProvider = tooltipPosition,
tooltip = { Text("Hello World") } ,
state = tooltipState) {
IconButton(onClick = { }) {
Icon(imageVector = Icons.Filled.Favorite,
contentDescription = "Your icon's description")
}
}
}
<पी>
<पी> जेटपैक कंपोज़ में टूलटिपडिफॉल्ट्स नामक एक अंतर्निहित क्लास है। टूलटिपबॉक्स बनाने वाले तर्कों को त्वरित करने में मदद के लिए आप इस क्लास का उपयोग कर सकते हैं। उदाहरण के लिए, आप TooltipDefaults.rememberPlainTooltipPositionProvider का उपयोग कर सकते हैं एंकर तत्व के संबंध में टूलटिप को सही ढंग से स्थित करने के लिए। रिच टूलटिप
<पी> एक रिच मीडिया टूलटिप एक सादे टूलटिप की तुलना में अधिक जगह लेता है और इसका उपयोग आइकन बटन की कार्यक्षमता के बारे में अधिक संदर्भ प्रदान करने के लिए किया जा सकता है। जब टूलटिप दिखाया जाता है, तो आप आगे स्पष्टीकरण या परिभाषाएँ प्रदान करने के लिए इसमें बटन और लिंक जोड़ सकते हैं। <पी> इसे टूलटिपबॉक्स के अंदर एक सादे टूलटिप के समान ही इंस्टेंट किया जाता है, लेकिन आप रिचटूलटिप कंपोज़ेबल का उपयोग करते हैं। TooltipBox(positionProvider = tooltipPosition,
tooltip = {
RichTooltip(
title = { Text("RichTooltip") },
caretSize = caretSize,
action = {
TextButton(onClick = {
scope.launch {
tooltipState.dismiss()
tooltipState.onDispose()
}
}) {
Text("Dismiss")
}
}
) {
Text("This is where a description would go.")
}
},
state = tooltipState) {
IconButton(onClick = {
/* Icon button's click event */
}) {
Icon(imageVector = tooltipIcon,
contentDescription = "Your icon's description",
tint = iconColor)
}
}
<पी> रिच टूलटिप के बारे में ध्यान देने योग्य कुछ बातें: - <पी> रिच टूलटिप में कैरेट के लिए समर्थन होता है।
- <पी> आप उपयोगकर्ताओं को अधिक जानकारी प्राप्त करने का विकल्प देने के लिए टूलटिप में एक क्रिया (अर्थात् एक बटन) जोड़ सकते हैं।
- <पी> आप टूलटिप को ख़ारिज करने के लिए तर्क जोड़ सकते हैं।
<पी>
<पी>
एज केस
<पी> जब आप अपनी टूलटिप स्थिति को सतत के रूप में चिह्नित करना चुनते हैं , इसका मतलब यह है कि एक बार जब उपयोगकर्ता आपके टूलटिप को दिखाने वाले यूआई के साथ इंटरैक्ट करता है, तो यह तब तक दृश्यमान रहेगा जब तक उपयोगकर्ता स्क्रीन पर कहीं और दबाता नहीं है। <पी> यदि आपने ऊपर रिच टूलटिप का उदाहरण देखा है, तो आपने देखा होगा कि हमने टूलटिप पर क्लिक करने के बाद उसे खारिज करने के लिए एक बटन जोड़ा है। <पी> उपयोगकर्ता द्वारा उस बटन को दबाते ही एक समस्या उत्पन्न हो जाती है। चूंकि बर्खास्तगी कार्रवाई टूलटिप पर की जाती है, यदि कोई उपयोगकर्ता इस टूलटिप को लागू करने वाले यूआई आइटम पर एक और लंबी प्रेस करना चाहता है, तो टूलटिप दोबारा नहीं दिखाया जाएगा। इसका मतलब यह है कि टूलटिप की स्थिति इसे खारिज किए जाने पर कायम है। तो, हम कैसे आगे बढ़ें और इसका समाधान कैसे करें? <पी>
<पी> टूलटिप की स्थिति को "रीसेट" करने के लिए, हमें onDispose को कॉल करना होगा वह विधि जो टूलटिप स्थिति के माध्यम से उजागर होती है। एक बार जब हम ऐसा कर लेते हैं, तो टूलटिप स्थिति रीसेट हो जाती है और जब उपयोगकर्ता यूआई आइटम पर एक लंबी प्रेस करेगा तो टूलटिप फिर से दिखाया जाएगा। @OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RichTooltip() {
val tooltipPosition = TooltipDefaults.rememberRichTooltipPositionProvider()
val tooltipState = rememberTooltipState(isPersistent = true)
val scope = rememberCoroutineScope()
TooltipBox(positionProvider = tooltipPosition,
tooltip = {
RichTooltip(
title = { Text("RichTooltip") },
caretSize = TooltipDefaults.caretSize,
action = {
TextButton(onClick = {
scope.launch {
tooltipState.dismiss()
tooltipState.onDispose() /// <---- HERE
}
}) {
Text("Dismiss")
}
}
) {
}
},
state = tooltipState) {
IconButton(onClick = { }) {
Icon(imageVector = Icons.Filled.Call, contentDescription = "Your icon's description")
}
}
}
<पी>
<पी> एक अन्य परिदृश्य जहां टूलटिप स्थिति रीसेट नहीं होती है, वह यह है कि उपयोगकर्ता की कार्रवाई के अनुसार खारिज विधि के लिए खुद को कॉल करने के बजाय, उपयोगकर्ता टूलटिप के बाहर क्लिक करता है, जिससे इसे खारिज कर दिया जाता है। यह पर्दे के पीछे की ख़ारिज विधि को कॉल करता है और टूलटिप स्थिति को ख़ारिज करने के लिए सेट किया जाता है। हमारे टूलटिप को दोबारा देखने के लिए यूआई तत्व पर लंबे समय तक दबाने से कुछ नहीं होगा। <पी>
<पी> टूलटिप की ऑनडिस्पोज़ विधि को कॉल करने वाला हमारा तर्क ट्रिगर नहीं होता है, तो हम टूलटिप की स्थिति को कैसे रीसेट कर सकते हैं? <पी> फ़िलहाल मैं इसका पता नहीं लगा पाया हूं. यह टूलटिप के MutatorMutex से संबंधित हो सकता है। शायद आगामी रिलीज़ के साथ, इसके लिए एक एपीआई होगी। मैंने देखा कि यदि अन्य टूलटिप स्क्रीन पर मौजूद हैं और उन्हें दबाया जाता है, तो यह पहले क्लिक किए गए टूलटिप को रीसेट कर देता है। <पी>
<पी> यदि आप यहां प्रदर्शित कोड देखना चाहते हैं, तो आप इस GitHub रिपॉजिटरी पर जा सकते हैं <पी> यदि आप किसी एप्लिकेशन में टूलटिप्स देखना चाहते हैं, तो आप इसे यहां देख सकते हैं। संदर्भ
- <पी> मटेरियल3 टूलटिप अवलोकनपी>
- <पी> टूलटिप डिफ़ॉल्ट
- <पी> टूलटिप स्रोत कोड
<पी> मुफ़्त में कोड करना सीखें. फ्रीकोडकैंप के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद की है। आरंभ करें