पीछे जाने पर झलक दिखाने वाला हाथ का जेस्चर, जेस्चर वाले नेविगेशन की एक सुविधा है. इसकी मदद से, उपयोगकर्ता यह देख सकते हैं कि पीछे की ओर स्वाइप करने पर वे कहां जाएंगे.
उदाहरण के लिए, पीछे जाने का जेस्चर इस्तेमाल करने पर, आपके ऐप्लिकेशन के पीछे होम स्क्रीन की ऐनिमेटेड झलक दिख सकती है. यह झलक, पहली इमेज में दिए गए मॉकअप में दिखाई गई है.
Android 15 से, पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर के लिए, डेवलपर के लिए सेटिंग और टूल की सुविधा उपलब्ध नहीं है. सिस्टम के ऐनिमेशन, जैसे कि होम स्क्रीन पर वापस जाना, एक टास्क से दूसरे टास्क पर जाना, और एक गतिविधि से दूसरी गतिविधि पर जाना अब उन ऐप्लिकेशन के लिए दिखते हैं जिन्होंने पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर की सुविधा चालू की है. यह सुविधा, पूरी तरह से या ऐक्टिविटी लेवल पर चालू की जा सकती है.
होम स्क्रीन पर वापस जाने वाले इस ऐनिमेशन की जांच की जा सकती है. इसके बारे में इस पेज के अगले सेक्शन में बताया गया है.
पीछे जाने पर झलक दिखाने वाले जेस्चर की सुविधा के लिए, आपको अपना ऐप्लिकेशन अपडेट करना होगा. इसके लिए, पिछली सुविधाओं के साथ काम करने वाले
OnBackPressedCallback AppCompat 1.6.0-alpha05
(AndroidX) या इसके बाद के वर्शन के साथ काम करने वाले एपीआई या नए OnBackInvokedCallback
प्लैटफ़ॉर्म एपीआई का इस्तेमाल करना होगा. ज़्यादातर ऐप्लिकेशन, AndroidX एपीआई का इस्तेमाल करते हैं, जो पुराने वर्शन के साथ भी काम करता है.
इस अपडेट से, पीछे जाने के नेविगेशन को सही तरीके से इंटरसेप्ट करने का तरीका मिलता है,
इसके लिए, KeyEvent.KEYCODE_BACK
और onBackPressed वाले किसी भी क्लास से, जैसे कि Activity और
Dialog से, पीछे जाने के इंटरसेप्शन को नए सिस्टम के बैक एपीआई से बदलना होगा.
कोडलैब और Google I/O का वीडियो
इस पेज पर मौजूद दस्तावेज़ का इस्तेमाल करने के अलावा, हमारा कोडलैब आज़माएं. इसमें, AndroidX Activity APIs का इस्तेमाल करके, पीछे जाने पर झलक दिखाने वाले जेस्चर को हैंडल करने वाले WebView के इस्तेमाल का एक सामान्य उदाहरण दिया गया है.
Google I/O का हमारा वीडियो भी देखा जा सकता है. इसमें, AndroidX और प्लैटफ़ॉर्म एपीआई को लागू करने के अन्य उदाहरण शामिल हैं.
Compose में, पीछे जाने के कस्टम जेस्चर को हैंडल करना
Compose, पीछे जाने के कस्टम जेस्चर को हैंडल करने के लिए, PredictiveBackHandler कंपोज़ेबल उपलब्ध कराता है. इस एपीआई की मदद से, पीछे जाने के जेस्चर पर प्रतिक्रिया दी जा सकती है. साथ ही, BackEventCompat ऑब्जेक्ट का Flow उपलब्ध कराया जा सकता है. इसका इस्तेमाल, उपयोगकर्ता के स्वाइप करने पर, कस्टम ऐनिमेशन या ट्रांज़िशन लागू करने के लिए किया जा सकता है.
PredictiveBackHandler(enabled = isBackHandlerEnabled) { progress: Flow<BackEventCompat> -> try { progress.collect { backEvent -> // Update your UI or animation based on backEvent.progress. } // Handle the final back action (e.g., navigate back). } catch (e: CancellationException) { // Back gesture was cancelled, reset your UI. } }
अगर आपको प्रोग्रेस को ट्रैक किए बिना, सिर्फ़ पीछे जाने के जेस्चर को इंटरसेप्ट करना है, तो इस्तेमाल करें
BackHandler.
डिफ़ॉल्ट रूप से पीछे जाने के नेविगेशन का इस्तेमाल करने वाले ऐप्लिकेशन को अपडेट करना
पीछे जाने पर झलक दिखाने वाला हाथ का जेस्चर, डिफ़ॉल्ट रूप से चालू होता है.
अगर आपका ऐप्लिकेशन, फ़्रैगमेंट या नेविगेशन कॉम्पोनेंट का इस्तेमाल करता है, तो उसे AndroidX Activity 1.6.0-alpha05 या इसके बाद के वर्शन पर अपग्रेड करें.
पीछे जाने के कस्टम नेविगेशन का इस्तेमाल करने वाले ऐप्लिकेशन को अपडेट करना
अगर आपका ऐप्लिकेशन, पीछे जाने के कस्टम बिहेवियर को लागू करता है, तो माइग्रेशन के अलग-अलग तरीके हैं. यह इस बात पर निर्भर करता है कि वह AndroidX का इस्तेमाल करता है या नहीं. साथ ही, वह पीछे जाने के नेविगेशन को कैसे हैंडल करता है.
| आपका ऐप्लिकेशन, पीछे जाने के नेविगेशन को कैसे हैंडल करता है | माइग्रेशन का सुझाया गया तरीका (इस पेज पर मौजूद लिंक) |
| AndroidX APIs | AndroidX के मौजूदा बैक इंप्लीमेंटेशन को माइग्रेट करना |
| प्लैटफ़ॉर्म के ऐसे एपीआई जो काम नहीं करते | AndroidX के ऐसे ऐप्लिकेशन को AndroidX APIs पर माइग्रेट करना जिनमें पीछे जाने के नेविगेशन के ऐसे एपीआई इस्तेमाल किए गए हैं जो काम नहीं करते |
AndroidX के पीछे जाने के नेविगेशन के इंप्लीमेंटेशन को माइग्रेट करना
यह इस्तेमाल का सबसे सामान्य (और सबसे ज़्यादा सुझाया गया) उदाहरण है. यह उन नए
या मौजूदा ऐप्लिकेशन पर लागू होता है जो
OnBackPressedDispatcherकी मदद से, जेस्चर वाला नेविगेशन हैंडल करते हैं. इसके बारे में,
पीछे जाने के कस्टम नेविगेशन की सुविधा उपलब्ध करानालेख में बताया गया है.
यह पक्का करने के लिए कि OnBackPressedDispatcher
(जैसे कि फ़्रैगमेंट और नेविगेशन कॉम्पोनेंट) का इस्तेमाल करने वाले एपीआई, पीछे जाने पर झलक दिखाने वाले जेस्चर के साथ सही तरीके से काम करें, AndroidX Activity 1.6.0-alpha05 पर अपग्रेड करें.
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0-alpha05"
}
AndroidX के ऐसे ऐप्लिकेशन को AndroidX APIs पर माइग्रेट करना जिनमें पीछे जाने के नेविगेशन के ऐसे एपीआई इस्तेमाल किए गए हैं जो काम नहीं करते
अगर आपका ऐप्लिकेशन, AndroidX लाइब्रेरी का इस्तेमाल करता है, लेकिन उसमें पीछे जाने के नेविगेशन के ऐसे एपीआई इस्तेमाल किए गए हैं या उनका रेफ़रंस दिया गया है जो काम नहीं करते, तो नए बिहेवियर के लिए, आपको AndroidX APIs का इस्तेमाल करने के लिए माइग्रेट करना होगा.
काम न करने वाले एपीआई को AndroidX APIs पर माइग्रेट करने के लिए:
पीछे जाने के सिस्टम को हैंडल करने की अपनी लॉजिक को,
OnBackPressedCallbackके इंप्लीमेंटेशन के साथ, AndroidX केOnBackPressedDispatcherपर माइग्रेट करें. ज़्यादा जानकारी के लिए, पीछे जाने के कस्टम नेविगेशन की सुविधा उपलब्ध कराना लेख देखें.पीछे जाने के जेस्चर को इंटरसेप्ट करना बंद करने के लिए,
OnBackPressedCallbackको बंद करें.OnBackPressedयाKeyEvent.KEYCODE_BACKका इस्तेमाल करके, पीछे जाने के इवेंट को इंटरसेप्ट करना बंद करें.पक्का करें कि आपने AndroidX Activity 1.6.0-alpha05 पर अपग्रेड किया हो.
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05" }
पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर की सुविधा से ऑप्ट आउट करना
ऑप्ट आउट करने के लिए, AndroidManifest.xml में, <application> टैग में, android:enableOnBackInvokedCallback फ़्लैग को false पर सेट करें.
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
इसे 'गलत है' पर सेट करने से, ये काम होते हैं:
- पीछे जाने पर झलक दिखाने वाले जेस्चर के सिस्टम ऐनिमेशन को बंद कर देता है.
OnBackInvokedCallbackको अनदेखा करता है. हालांकि,OnBackPressedCallbackकॉल काम करते रहते हैं.
ऐक्टिविटी लेवल पर ऑप्ट आउट करना
android:enableOnBackInvokedCallback फ़्लैग की मदद से, ऐक्टिविटी लेवल पर, पीछे जाने पर झलक दिखाने वाले सिस्टम ऐनिमेशन से ऑप्ट आउट किया जा सकता है. इस बिहेवियर की वजह से, एक से ज़्यादा ऐक्टिविटी वाले बड़े ऐप्लिकेशन को, पीछे जाने पर झलक दिखाने वाले जेस्चर पर माइग्रेट करना आसान हो जाता है.
यहां दिए गए कोड में, MainActivity से, होम स्क्रीन पर वापस जाने वाले सिस्टम ऐनिमेशन को चालू करने के लिए, enableOnBackInvokedCallback को सेट करने का एक उदाहरण दिखाया गया है:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
android:enableOnBackInvokedCallback फ़्लैग का इस्तेमाल करते समय, इन बातों का ध्यान रखें:
android:enableOnBackInvokedCallback=falseको सेट करने पर, पीछे जाने पर झलक दिखाने वाले ऐनिमेशन बंद हो जाते हैं. यह इस बात पर निर्भर करता है कि आपने टैग कहां सेट किया है. यह ऐक्टिविटी लेवल या ऐप्लिकेशन लेवल पर बंद हो सकते हैं. साथ ही, यह सिस्टम कोOnBackInvokedCallbackप्लैटफ़ॉर्म एपीआई के कॉल को अनदेखा करने का निर्देश देता है. हालांकि,OnBackPressedCallbackके कॉल चलते रहते हैं, क्योंकिOnBackPressedCallbackपुराने वर्शन के साथ भी काम करता है औरonBackPressedएपीआई को कॉल करता है. यह एपीआई, Android 13 से पहले के वर्शन में काम नहीं करता.- ऐप्लिकेशन लेवल पर,
enableOnBackInvokedCallbackफ़्लैग को सेट करने पर, ऐप्लिकेशन में मौजूद सभी ऐक्टिविटी के लिए डिफ़ॉल्ट वैल्यू सेट हो जाती है. ऐक्टिविटी लेवल पर फ़्लैग सेट करके, हर ऐक्टिविटी के लिए डिफ़ॉल्ट वैल्यू को बदला जा सकता है. जैसा कि ऊपर दिए गए कोड के उदाहरण में दिखाया गया है.
कॉलबैक के लिए दिशा-निर्देश
सिस्टम के पीछे जाने के लिए काम करने वाले कॉलबैक का इस्तेमाल करते समय, इन दिशा-निर्देशों का पालन करें:
PredictiveBackHandler या BackHandler (Compose के लिए),
OnBackPressedCallback या OnBackInvokedCallback.
यूज़र इंटरफ़ेस (यूआई) की वह स्थिति तय करना जिससे हर कॉलबैक चालू और बंद होता है
यूज़र इंटरफ़ेस (यूआई) की स्थिति एक ऐसी प्रॉपर्टी है जो यूज़र इंटरफ़ेस (यूआई) के बारे में बताती है. हमारा सुझाव है कि आप यह तरीका अपनाएं.
यूज़र इंटरफ़ेस (यूआई) की वह स्थिति तय करें जिससे हर कॉलबैक चालू और बंद होता है.
उस स्थिति को, दिखने वाले डेटा होल्डर टाइप का इस्तेमाल करके तय करें. जैसे,
StateFlowया Compose State. साथ ही, स्थिति में बदलाव होने पर, कॉलबैक को चालू या बंद करें.
अगर आपका ऐप्लिकेशन, पहले से ही शर्तों के आधार पर, पीछे जाने के लॉजिक को जोड़ रहा है, तो इसका मतलब है कि पीछे जाने का इवेंट होने के बाद, आप उस पर प्रतिक्रिया दे रहे हैं. नए कॉलबैक के साथ इस पैटर्न से बचें. अगर हो सके, तो कॉलबैक को शर्त के आधार पर तय किए गए स्टेटमेंट से बाहर ले जाएं. इसके बजाय, कॉलबैक को मॉनिटर किया जा सकने वाले डेटा होल्डर टाइप से जोड़ें.
यूज़र इंटरफ़ेस (यूआई) के लॉजिक के लिए, सिस्टम के पीछे जाने के कॉलबैक का इस्तेमाल करना
यूज़र इंटरफ़ेस (यूआई) का लॉजिक तय करता है कि यूज़र इंटरफ़ेस (यूआई) कैसे दिखेगा. यूज़र इंटरफ़ेस (यूआई) के लॉजिक को चलाने के लिए, सिस्टम के पीछे जाने के कॉलबैक का इस्तेमाल करें. जैसे, डायलॉग दिखाना या ऐनिमेशन चलाना.
अगर आपका ऐप्लिकेशन, PRIORITY_DEFAULT या PRIORITY_OVERLAY के साथ OnBackPressedCallback या OnBackInvokedCallback को चालू करता है, तो पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर वाले ऐनिमेशन नहीं चलते. साथ ही, आपको पीछे जाने के इवेंट को हैंडल करना होगा. कारोबारी नियमों को चलाने या लॉग करने के लिए, इन कॉलबैक को न बनाएं.
अगर आपका ऐप्लिकेशन, उपयोगकर्ता के पीछे की ओर स्वाइप करने पर, कारोबारी नियम को चलाता है या लॉग करता है, तो यह तरीका अपनाएं:
- Android 16
और इसके बाद के वर्शन वाले डिवाइसों पर,
OnBackInvokedCallbackके साथPRIORITY_SYSTEM_NAVIGATION_OBSERVERका इस्तेमाल करें. इससे, एक ऐसा ऑब्ज़र्वर-कॉलबैक बनता है जो पीछे जाने के इवेंट का इस्तेमाल नहीं करता. उदाहरण के लिए, इस कॉलबैक को तब रजिस्टर किया जा सकता है, जब उपयोगकर्ता रूट ऐक्टिविटी से पीछे की ओर स्वाइप करता है. दूसरे शब्दों में कहें, तो जब उपयोगकर्ता आपका ऐप्लिकेशन छोड़ देता है. इस मामले में, पीछे जाने के इवेंट को लॉग किया जा सकता है या कारोबार के अन्य लॉजिक को चलाया जा सकता है. साथ ही, होम स्क्रीन पर वापस जाने वाला ऐनिमेशन अब भी चलेगा. - ऐक्टिविटी-टू-ऐक्टिविटी या फ़्रैगमेंट-टू-ऐक्टिविटी के मामलों में, अगर
onDestroyमेंisFinishingकी वैल्यू, ऐक्टिविटी लाइफ़साइकल मेंtrueहै, तो लॉग करें. - फ़्रैगमेंट-टू-फ़्रैगमेंट के मामलों में, अगर
onDestroyमेंisRemovingकी वैल्यू, फ़्रैगमेंट के व्यू लाइफ़साइकल में 'सही है' है, तो लॉग करें. इसके अलावा,FragmentManager.OnBackStackChangedListenerमें,onBackStackChangeStartedयाonBackStackChangeCommittedतरीकों का इस्तेमाल करके लॉग करें. - Compose के मामले में, Compose डेस्टिनेशन से जुड़े
ViewModelकेonCleared()कॉलबैक में लॉग करें. यह जानने के लिए सबसे अच्छा सिग्नल है कि Compose डेस्टिनेशन, बैक स्टैक से कब हटाया गया और कब डिस्ट्रॉय हुआ.
एक ही काम के लिए कॉलबैक बनाना
डिस्पैचर में एक से ज़्यादा कॉलबैक जोड़े जा सकते हैं. कॉलबैक को एक स्टैक में जोड़ा जाता है. इसमें, सबसे आखिर में जोड़ा गया चालू कॉलबैक, पीछे जाने के अगले जेस्चर को हैंडल करता है. हर जेस्चर के लिए एक कॉलबैक होता है.
अगर किसी कॉलबैक की ज़िम्मेदारी सिर्फ़ एक है, तो उसकी चालू स्थिति को मैनेज करना आसान होता है. उदाहरण के लिए:
दूसरी इमेज में दिखाया गया है कि स्टैक में एक से ज़्यादा कॉलबैक कैसे हो सकते हैं. हर कॉलबैक की ज़िम्मेदारी एक काम होती है. कोई कॉलबैक सिर्फ़ तब चलता है, जब स्टैक में उससे पहले के कॉलबैक बंद हों. इस उदाहरण में, "क्या आपको पक्का है..." कॉलबैक तब चालू होता है, जब उपयोगकर्ता किसी फ़ॉर्म में डेटा डालता है. इसके अलावा, यह बंद रहता है. जब उपयोगकर्ता, फ़ॉर्म से बाहर निकलने के लिए पीछे की ओर स्वाइप करता है, तो कॉलबैक एक पुष्टि डायलॉग खोलता है.
दूसरे कॉलबैक में, ऐसा मटीरियल कॉम्पोनेंट शामिल किया जा सकता है जो पीछे जाने पर झलक दिखाने वाले जेस्चर की सुविधा के साथ काम करता हो. इसके अलावा, प्रोग्रेस एपीआई का इस्तेमाल करके, AndroidX ट्रांज़िशन या कोई अन्य कस्टम कॉलबैक शामिल किया जा सकता है.
Compose में भी, स्टैक का यही बिहेवियर लागू होता है: सबसे अंदर मौजूद
PredictiveBackHandler या BackHandler को प्राथमिकता मिलती है.
इसी तरह, childFragmentManager का कॉलबैक तब चलता है, जब उससे पहले के कॉलबैक बंद हों और इस FragmentManager के लिए पिछली गतिविधियां खाली न हों. इस उदाहरण में, यह इंटरनल कॉलबैक बंद है.
इसी तरह, supportFragmentManager का इंटरनल कॉलबैक तब चलता है, जब उससे पहले के कॉलबैक बंद हों और उसका स्टैक खाली न हो. इस उदाहरण में, यह कॉलबैक तब चलता है, जब उपयोगकर्ता ने फ़ॉर्म में टेक्स्ट नहीं डाला हो. इस वजह से, "क्या आपको पक्का है..." कॉलबैक बंद हो जाता है.
आखिर में, अगर उससे पहले के कॉलबैक बंद हैं, तो सिस्टम, पीछे जाने के जेस्चर को हैंडल करता है. सिस्टम के ऐनिमेशन, जैसे कि होम स्क्रीन पर वापस जाना, एक ऐक्टिविटी से दूसरी ऐक्टिविटी पर जाना, और एक टास्क से दूसरे टास्क पर जाना ट्रिगर करने के लिए, supportFragmentManager का बैक स्टैक खाली होना चाहिए. इसलिए, इसका इंटरनल कॉलबैक बंद हो जाता है.
पीछे जाने पर झलक दिखाने वाले जेस्चर के ऐनिमेशन की जांच करना
अगर अब भी Android 13 या Android 14 का इस्तेमाल किया जाता है, तो पहली इमेज में दिखाए गए, होम स्क्रीन पर वापस जाने वाले ऐनिमेशन की जांच की जा सकती है.
इस ऐनिमेशन की जांच करने के लिए, यह तरीका अपनाएं:
अपने डिवाइस पर, सेटिंग > सिस्टम > डेवलपर के लिए सेटिंग और टूल पर जाएं.
पीछे जाने पर झलक दिखाने वाले ऐनिमेशन चुनें.
अपडेट किया गया ऐप्लिकेशन लॉन्च करें. इसके बाद, ऐनिमेशन देखने के लिए, पीछे जाने के जेस्चर का इस्तेमाल करें.