31 अक्टूबर, 2013 को Google ने Android 4.4 किटकैट का एक नया संस्करण पेश किया, जिसमें डेवलपर्स के लिए कई दिलचस्प विशेषताएं हैं। इनमें से एक फीचर
इमर्सिव मोड है । डाइव मोड एक ऐसी विधा है जिसमें आपका प्रोग्राम पूरी स्क्रीन में उपयोगकर्ता को दिखाया जाता है, जबकि नेविगेशन पैनल (बैक बटन वाला एक) सहित कोई भी सिस्टम पैनल दिखाई नहीं देता है। एंड्रॉइड 4.4 से पहले, सिस्टम पैनल (
नेविगेशन बार और
स्टेटस बार ) को छिपाने की क्षमता भी थी। लेकिन मौजूदा संस्करण में एक खामी थी - उपयोगकर्ता सामग्री में पूरी तरह से खुद को विसर्जित नहीं कर सकता था, क्योंकि सामग्री पर किसी भी क्लिक से सिस्टम पैनल के प्रदर्शन का फिर से कारण होता था। नया डाइव मोड सिस्टम पैनल के प्रदर्शन के साथ बातचीत करने का एक और तरीका जोड़ता है। इस मोड में, सिस्टम पैनलों को प्रदर्शित करने के लिए, यह उपयोगकर्ता के लिए स्क्रीन के केंद्र की ओर स्क्रीन के ऊपरी या निचले किनारे से स्वाइप करने के लिए पर्याप्त है, जबकि सामग्री पर क्लिक करके पैनल प्रदर्शित करना वैकल्पिक है, जिससे एप्लिकेशन और गेम बनते हैं जिसमें उपयोगकर्ता पूरी तरह से बातचीत कर सकता है। किसी भी इशारों के साथ आवेदन या खेल। उपयोगकर्ता को यह समझने के लिए कि सिस्टम स्क्रीन को पूर्ण स्क्रीन मोड से कैसे कॉल किया जाता है, पहली बार एप्लिकेशन लॉन्च होने पर, वह स्वचालित रूप से एक सिस्टम संदेश देखेगा कि इन पैनलों को फिर से स्क्रीन पर कैसे प्रदर्शित किया जाए।



आप यह भी सोच सकते हैं कि इस मोड का उपयोग करने में एक और समस्या है। उदाहरण के लिए, एक उपयोगकर्ता ने एक ड्राइंग प्रोग्राम शुरू किया है और स्क्रीन के किनारे से एक रेखा खींचना चाहता है, और यह कैसे होता है, क्या वह वास्तव में इस मामले में एक सिस्टम पैनल देखेंगे। हां, लेकिन एक ही समय में, एप्लिकेशन को स्क्रीन पर टैप से संदेश भी प्राप्त होगा और एक रेखा खींचेगा। वैसे, अब आप केवल दो नए थीम -
Theme.Holo.NoActionBar.TranslucentDecor और
Theme.Holo.Light.NoActionBar.TranslucentDecor की मदद से सिस्टम पैनल को पारभासी बना सकते हैं। लेकिन यह याद रखने योग्य है कि इस मामले में, आपकी सामग्री स्क्रीन पर पूरे क्षेत्र पर कब्जा कर लेगी और पारभासी प्रणाली पैनलों के पीछे भी दिखाई देगी। यदि आपको सिस्टम पैनल से परे जाने के लिए इंटरफ़ेस के कुछ हिस्से की आवश्यकता है (उदाहरण के लिए, कुछ अतिरिक्त पैनल), तो आपको इस सामग्री के मूल लेआउट के लिए सही होने के लिए
FitSystemWindows विशेषता सेट करने की आवश्यकता है। इन विषयों के साथ एक बहुत सुखद बात यह नहीं है कि वे पैनल के लिए अवर पारभासी का उपयोग करते हैं, लेकिन ढाल (काले से पारभासी तक), जो हमेशा सुंदर नहीं दिखता है। यदि आप अपना स्वयं का कस्टम विषय बनाते हैं, तो आप या तो इन नए विषयों से इनहेरिट कर सकते हैं या मैन्युअल रूप से दो नए गुण जोड़ सकते हैं
WindowTranslucentNavigation (चाहे सिस्टम नेविगेशन बार पारदर्शी हो) और
windowTranslucentStatus (सिस्टम घड़ी के साथ सिस्टम स्थिति पारदर्शी है)।
लेकिन जब आप पहले से ही पैनल प्रदर्शित करते हैं तो आप फिर से पूर्ण-स्क्रीन मोड में कैसे आते हैं? उपयोगकर्ता के पास कई विकल्प हैं - सिस्टम पैनलों के बाहर किसी भी सामग्री पर क्लिक करें, पैनलों के स्वचालित रूप से गायब होने के लिए थोड़ी देर प्रतीक्षा करें, या स्क्रीन के केंद्र से किनारे तक स्वाइप करें। प्रोग्रामर अपने आवेदन में इन सभी विकल्पों को प्रदान कर सकता है। यह अंत करने के लिए, एंड्रॉइड टीम ने इमर्सिव मोड के साथ बातचीत के इन तरीकों को लागू करना बहुत आसान बना दिया है। दो प्रकार के गोता मोड हैं -
नियमित और
चिपचिपा । सामान्य मोड में, प्रोग्रामर को यह तय करना होगा कि पैनलों को कब छिपाना है, और स्टिकी-मोड सिस्टम पैनलों में स्वचालित रूप से छिपाया जाएगा। दोनों प्रकार के डाइव मोड सेट करने के लिए, आपको
setSystemUiVisibility () विधि का उपयोग करना चाहिए, केवल मापदंडों को अलग-अलग झंडे पास करें। इस पद्धति को तथाकथित सजावट दृश्य पर बुलाया जाना चाहिए, जो कि इसके सभी डिज़ाइन और सामग्री के साथ गतिविधि विंडो की उपस्थिति है। इस दृश्य का लिंक बहुत सरल है।
mDecorView = getWindow().getDecorView();
आइए दोनों प्रकार के गोता मोड को अधिक विस्तार से देखें।
सामान्य इमर्सिव मोड
सामान्य मोड सेट करने के लिए,
System_UI_FLAG_IMMERSIVE ध्वज को
setSystemUiVisibility () विधि के पैरामीटर के रूप में उपयोग करें।
सामान्य इमर्सिव मोड के साथ काम करना सबसे अच्छा है, दो सरल तरीकों को बनाने के लिए जो क्रमशः सिस्टम पैनल दिखाएगा और छिपाएगा।
private void hideSystemUI() { mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_IMMERSIVE); } private void showSystemUI() { mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); }
उन मामलों के लिए जब आपको सामग्री (सामग्री
दृश्य ) पर क्लिक करके सिस्टम पैनल दिखाने और छिपाने की आवश्यकता होती है, तो आपको निम्नलिखित कोड का उपयोग करना होगा। यह उपयोगी हो सकता है, उदाहरण के लिए, वीडियो देखते समय, जैसा कि YouTube में है, जहां आपको इसे देखते समय सामग्री के साथ सहभागिता करने की आवश्यकता नहीं है।
contentView.setClickable(true); final GestureDetector clickDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { boolean visible = (mDecorView.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; if (visible) { hideSystemUI(); } else { showSystemUI(); } return true; } }); contentView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return clickDetector.onTouchEvent(motionEvent); } });
यदि आपके आवेदन में एक ही समय में आपके पास अपने स्वयं के कुछ पैनल (
controlView ) हैं, जिन्हें सिस्टम के साथ भी छिपाया जाना है, तो आप निम्न कोड लिखकर भी ऐसा कर सकते हैं। यहां, अल्फा चैनल एनीमेशन और आपके पैनल की वाई स्थिति का उपयोग करके छिपाना और दिखाई देना होता है।
mDecorView.setOnSystemUiVisibilityChangeListener( new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int flags) { boolean visible = (flags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; controlsView.animate() .alpha(visible ? 1 : 0) .translationY(visible ? 0 : controlsView.getHeight()); } });
यदि आप एप्लिकेशन शुरू करते हैं तो आप उपयोगकर्ता को दिखाना चाहते हैं कि एप्लिकेशन में पैनल हैं, और फिर थोड़ी देर बाद उन्हें छिपाएं, यह भी काफी सरल है।
private static final int INITIAL_HIDE_DELAY = 300; @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); delayedHide(INITIAL_HIDE_DELAY); } private final Handler mHideHandler = new Handler() { @Override public void handleMessage(Message msg) { hideSystemUI(); } }; private void delayedHide(int delayMillis) { mHideHandler.removeMessages(0); mHideHandler.sendEmptyMessageDelayed(0, delayMillis); }
इसके अलावा, कभी-कभी यह पैनल को दिखाने के लिए आवश्यक हो सकता है जब खिड़की को फोकस प्राप्त होता है, उदाहरण के लिए, तथाकथित संवाद से लौटने के बाद। इस विकल्प को निम्नलिखित कोड के साथ संसाधित किया जा सकता है।
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { delayedHide(INITIAL_HIDE_DELAY); } else { mHideHandler.removeMessages(0); } }
इस स्थिति में, पैनल आपके द्वारा निर्धारित समय के बाद दिखाई देगा और फिर गायब हो जाएगा।
इमर्सिव मोड चिपचिपा
चिपचिपा मोड सेट करने के लिए,
System_UI_FLAG_IMMERSIVE_STICKY ध्वज का उपयोग
setSystemUiVisibility () पद्धति के पैरामीटर के रूप में करें।
यह विधा अत्यंत सरल है। यदि आपको ऐसी स्थिति की आवश्यकता है जिसमें सिस्टम पैनल छिपे होंगे जब विंडो फोकस प्राप्त करती है या पैनल दिखाई देने के कुछ समय बाद गुजरती है, तो यह मोड आपके लिए है। इस मोड को सक्षम करने के लिए, आपको
फ़ोकस होने पर विंडो के लिए
SYSTEM_UI_FLAG_IMMERSIVE_STICKY ध्वज सेट करना
होगा । इस मोड में, यदि विंडो फ़ोकस
खोती है, तो यह स्वचालित रूप से उस स्थिति में रीसेट हो जाता है, जिसमें विंडो
SYSTEM_UI_FLAG_IMMERSIVE_STICKY ध्वज से पहले
सेट की गई थी , यानी सभी पैनल के साथ। जैसे ही खिड़की फोकस प्राप्त करती है, पैनल थोड़ी देर बाद फिर से गायब हो जाते हैं और आपको इस स्थिति को मैन्युअल रूप से प्रोग्राम करने की आवश्यकता नहीं होती है। सिस्टम पैनल दिखाने के लिए, आपको सामान्य मोड में भी स्क्रीन के किनारों से एक स्वाइप बनाना होगा। स्टिक मोड को सक्षम करना एक साधारण कोड कोड के साथ किया जाता है।
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } }
पुनश्च लेख
रोमन नुरिक से वीडियो सामग्री का इस्तेमाल किया। इस मोड का उपयोग करने पर रोमन से पूर्ण उदाहरणों का कोड
यहां डाउनलोड किया जा सकता
है ।
पीपीएस 20 नवंबर को, इस आहार पर प्रशिक्षण किट में एक नया
लेख दिखाई दिया। मैं निकट भविष्य में लेख के पूरक की कोशिश करूंगा, उसे ध्यान में रखकर।