फ्रीफ़ॉर्म मल्टी-विंडो मोड एंड्रॉइड नौगट में एक कम उपयोग की गई और कम सराहना की गई सुविधा है। हम बताते हैं कि यह क्या है और डेवलपर्स इसे कैसे शामिल कर सकते हैं।
जब एंड्रॉइड 7.0 नूगट को पहली बार 2016 की शुरुआत में घोषित किया गया था, तो यह अपने साथ एंड्रॉइड प्लेटफ़ॉर्म पर एक बहुप्रतीक्षित सुविधा - मल्टी-विंडो समर्थन लेकर आया था। अधिकांश लोग सभी एंड्रॉइड नौगट फोन और टैबलेट पर डिफ़ॉल्ट रूप से सक्षम स्प्लिट-स्क्रीन मल्टी-विंडो समर्थन के बारे में जानते हैं। एंड्रॉइड नौगट वाले एंड्रॉइड टीवी डिवाइस पिक्चर-इन-पिक्चर मल्टी-विंडो सपोर्ट के साथ आते हैं।
हालाँकि, एंड्रॉइड नौगट में एक तीसरा मल्टी-विंडो मोड मौजूद है जिसके बारे में बहुत से लोग नहीं जानते हैं: फ्रीफॉर्म विंडो मोड. यह मोड एंड्रॉइड को ऐप्स को फ्लोटिंग विंडो के रूप में प्रस्तुत करने की अनुमति देता है जिसे उपयोगकर्ता द्वारा इच्छानुसार स्थानांतरित और आकार दिया जा सकता है। यह अनिवार्य रूप से एंड्रॉइड का कार्यान्वयन है स्टैकिंग विंडो प्रबंधक.
में एंड्रॉइड एसडीके दस्तावेज़ीकरण, यह प्रकट करता है की:
बड़े उपकरणों के निर्माता फ्रीफॉर्म मोड को सक्षम करना चुन सकते हैं, जिसमें उपयोगकर्ता स्वतंत्र रूप से प्रत्येक गतिविधि का आकार बदल सकता है। यदि निर्माता इस सुविधा को सक्षम करता है, तो डिवाइस स्प्लिट-स्क्रीन मोड के अलावा फ्रीफॉर्म मोड भी प्रदान करता है।
और भी, में एंड्रॉइड 7.0 सीडीडी:
स्क्रीन आकार xlarge के साथ डिवाइस कार्यान्वयन को फ्रीफॉर्म मोड का समर्थन करना चाहिए।
यह इंगित करता है कि कोई भी नया बड़ी स्क्रीन वाला एंड्रॉइड डिवाइस जो एंड्रॉइड 7.0 के साथ आता है, उसमें संभावित रूप से निर्माता द्वारा फ्रीफॉर्म विंडो मोड सक्षम किया जा सकता है।
हालाँकि, यह बिल्कुल भी कोई कठिन आवश्यकता नहीं है। जबरदस्ती करना संभव है कोई एंड्रॉइड नौगट डिवाइस (डेवलपर विकल्प सक्षम होने के साथ) दो अलग-अलग तरीकों में से एक का उपयोग करके फ्रीफॉर्म विंडो मोड का समर्थन करने के लिए:
किसी भी एंड्रॉइड नौगट डिवाइस पर फ्रीफॉर्म विंडो मोड सक्षम करना
विधि 1 (एडीबी वाला कंप्यूटर आवश्यक है)
सुनिश्चित करें कि डेवलपर विकल्पों में यूएसबी डिबगिंग सक्षम है। फिर, अपने डिवाइस को एडीबी इंस्टॉल वाले कंप्यूटर से कनेक्ट करें, और निम्नलिखित कमांड निष्पादित करें:
adb shell settings put global enable_freeform_support 1
विधि 2 (कोई अतिरिक्त आवश्यकता नहीं)
डेवलपर विकल्पों के नीचे "गतिविधियों को आकार बदलने योग्य बनाएं" विकल्प को सक्षम करें।
इन दोनों विधियों को प्रभावी होने से पहले सिस्टम यूआई को पुनरारंभ करने की आवश्यकता होती है। ऐसा करने का सबसे आसान तरीका अपने डिवाइस को रीबूट करना है (या, यदि आपका डिवाइस रूट है, तो आप बस इसे बंद कर सकते हैं com.android.systemui
प्रक्रिया)
ठीक है, तो फ़्रीफ़ॉर्म मोड सक्षम है... अब क्या?
यदि आपने विधि 1 का उपयोग करके फ्रीफॉर्म मोड सक्षम किया है, तो ऐप को फ्रीफॉर्म विंडो मोड में लॉन्च करने के लिए अवलोकन मेनू में ऐप प्रविष्टियों पर एक नया बटन होगा।
हालाँकि, विधि 2 के साथ, किसी ऐप को एंड्रॉइड के माध्यम से फ्रीफॉर्म मोड में लॉन्च करना संभव नहीं है। सौभाग्य से, किसी भी तृतीय-पक्ष लॉन्चर के लिए किसी ऐप को फ़्रीफ़ॉर्म विंडो मोड में लॉन्च करना संभव है मानक एंड्रॉइड एपीआई का उपयोग करना जिसे एपीआई स्तर 24 के हिस्से के रूप में अंतिम रूप दिया गया था।
किसी ऐप को फ्रीफॉर्म मोड में लॉन्च करने की कुंजी कॉल करना है ActivityOptions.setLaunchBounds()
तरीका। यह विधि एक लेती है Rect
एक तर्क के रूप में, जिसमें वह विंडो सीमाएँ शामिल हैं जिनके साथ ऐप लॉन्च होगा।
इसके बाद आप ऐप शुरू कर सकते हैं startActivity(Intent, Bundle)
. यदि आपके पास पहले से नहीं है ActivityOptions
बंडल, आप इसके साथ एक बना सकते हैं ActivityOptions.makeBasic()
और फिर कॉल करना setLaunchBounds()
ताज़ा बने बंडल पर.
ध्यान दें कि डिफ़ॉल्ट रूप से, यदि अवलोकन स्क्रीन में ऐप के लिए पहले से ही कोई कार्य मौजूद है एंड्रॉइड आपको बस मौजूदा (फुलस्क्रीन) कार्य पर रीडायरेक्ट करेगा जो पहले लॉन्च किया गया था उपयोगकर्ता. ऐप को फ्रीफॉर्म विंडो में लॉन्च करने का प्रयास करने से पहले आपको ऐप के लिए किसी भी कार्य को ओवरव्यू में साफ़ करना होगा। (लॉन्च होने वाली गतिविधियों वाले ऐप्स के लिए standard
या singleTop
मोड, आप जोड़कर एक नई विंडो को खोलने के लिए बाध्य कर सकते हैं Intent.FLAG_ACTIVITY_MULTIPLE_TASK
कॉल करने से पहले इरादे को ध्वजांकित करें startActivity()
.)
फ़्रीफ़ॉर्म मोड अंडर-द-हुड कैसे काम करता है?
वहाँ है एक उत्कृष्ट लेख लिखा गया है जो बताता है कि एंड्रॉइड नौगट में फ्रीफॉर्म मोड सहित मल्टी-विंडो मोड कैसे लागू किया जाता है। (नोट: लेख चीनी भाषा में लिखा गया है, इसलिए इसे Google अनुवाद के माध्यम से चलाना सुनिश्चित करें)
संक्षेप में, फ्रीफॉर्म मोड में ऐप्स बाकी सिस्टम से अलग स्टैक में चलते हैं (सोचिए: वर्चुअल डेस्कटॉप)। इसलिए, फ्रीफ़ॉर्म ऐप्स के लिए लॉन्चर के शीर्ष पर या किसी अन्य फ़ुल-स्क्रीन ऐप के शीर्ष पर चलना संभव नहीं है।
फ्रीफ़ॉर्म मोड में चलने वाले ऐप्स (जिनके पास नहीं है)। android: windowIsFloating
सत्य पर सेट करें) एक है DecorCaptionView
शीर्ष स्तर के बच्चे के रूप में जोड़ा गया DecorView
. इस दृश्य में एक शामिल है LinearLayout
विंडो को हिलाने, अधिकतम करने और बंद करने के लिए विंडो के कैप्शन बार को परिभाषित करना। हालाँकि मैं व्यक्तिगत रूप से इसकी अनुशंसा नहीं करता हूँ, लेकिन इसे प्राप्त करके इस दृश्य तक पहुँचना और अनुकूलित करना संभव है DecorView
का उपयोग करते हुए Window.getDecorView()
, इसे एक में डालना ViewGroup
और फिर इसके चाइल्ड व्यू तक पहुँचना।
कोई भी ऐप जो एंड्रॉइड के मानक स्प्लिट-स्क्रीन मल्टी-विंडो मोड में अच्छा व्यवहार करने के लिए डिज़ाइन किया गया है, फ्रीफॉर्म मोड में काम करेगा। isInMultiWindowMode()
फ़्रीफ़ॉर्म मोड में चल रहे ऐप्स के लिए सत्य लौटाएगा। कुछ अन्य सार्वजनिक रूप से उपलब्ध कक्षाएं और विधियां हैं जिनका उपयोग एक ऐप कर सकता है जो विशेष रूप से फ्रीफॉर्म मोड से संबंधित हैं:
-
Window.setDecorCaptionShade()
: इस पद्धति का उपयोग फ़्रीफ़ॉर्म मोड में ऐप्स के लिए कैप्शन नियंत्रण (अधिकतम और बंद करें बटन) की छाया को ओवरराइड करने के लिए किया जा सकता है। -
Window.setRestrictedCaptionAreaListener()
: इसका उपयोग यह पता लगाने के लिए किया जा सकता है कि विंडो को फ़्रीफ़ॉर्म मोड में कब घुमाया जाता है।Window.OnRectrictedCaptionAreaChangedListener
हर बार कैप्शन नियंत्रण की स्थिति बदलने पर कॉल किया जाता है (जब कोई उपयोगकर्ता विंडो को इधर-उधर घुमाता है), और एक प्रदान करता हैRect
कैप्शन नियंत्रण की नई सीमाओं के साथ। -
ActivityInfo.WindowLayout
: इस वर्ग में ऐप के मैनिफ़ेस्ट में फ्रीफ़ॉर्म विंडो की प्रारंभिक स्थिति के बारे में घोषित जानकारी शामिल है जिसे ऐप लॉन्च पर अनुरोध कर सकता है। उदाहरण के लिए, आप निम्नलिखित को इसमें सूचीबद्ध कर सकते हैं आपके मेनिफेस्ट का टैग:
फिर, जब डिवाइस पहले से ही फ्रीफॉर्म मोड में है और ऐप लॉन्च किया गया है, तो यह इन निर्दिष्ट सीमाओं के साथ लॉन्च होगा।android: defaultHeight="640dp"
android: defaultWidth="360dp"
android: gravity="center" />
क्रियाशील फ्रीफॉर्म विंडो मोड के उदाहरण
2016 की गर्मियों में, जबकि एंड्रॉइड नौगट अभी भी एक डेवलपर पूर्वावलोकन था, मैंने नामक एक ऐप जारी किया टास्कबार जो सिस्टम ओवरले में विंडोज़ जैसा स्टार्ट मेनू और हालिया ऐप सूची प्रदान करता है। यह नूगाट पर उपयोगकर्ताओं को फ्रीफॉर्म विंडो मोड में ऐप्स लॉन्च करने की अनुमति देता है - और, चूंकि टास्कबार एक ओवरले का उपयोग करता है, यह फ्रीफॉर्म विंडो वातावरण में स्क्रीन पर रह सकता है। टास्कबार और फ्रीफॉर्म मोड का संयोजन किसी भी एंड्रॉइड डिवाइस, विशेष रूप से टैबलेट, को पीसी जैसा अनुभव देता है।
तुम कर सकते हो टास्कबार डाउनलोड करें Google Play पर, या स्रोत कोड देखें GitHub पर स्वयं। इस लेख में उल्लिखित अवधारणाओं के अलावा, मैं फ़्रीफ़ॉर्म मोड वातावरण को सक्रिय रखने के लिए कुछ तरकीबें भी अपनाता हूँ, तब भी जब स्क्रीन पर कोई फ़्रीफ़ॉर्म विंडो प्रदर्शित नहीं होती है। उपयोगकर्ता अपने डिवाइस को फ्रीफॉर्म मोड वातावरण में स्वचालित रूप से बूट करने की अनुमति देने के लिए वैकल्पिक रूप से टास्कबार को अपने डिफ़ॉल्ट लॉन्चर के रूप में भी सेट कर सकते हैं।
चूंकि ऐसे कोई उपकरण नहीं हैं जो आधिकारिक तौर पर ओईएम द्वारा सक्षम फ्रीफॉर्म विंडो समर्थन के साथ शिप किए जाते हैं (इस लेखन के समय), मैं अनुशंसा करता हूं डेवलपर्स के लिए एक उपकरण के रूप में टास्कबार का उपयोग करना, उन उपकरणों पर फ्रीफॉर्म विंडो वातावरण में अपने ऐप्स का परीक्षण करना जो अन्यथा समर्थन नहीं करते हैं यह।
टास्कबार के अलावा, मैंने ऐप्स को फ्रीफॉर्म मोड में लॉन्च करने की अनुमति देने के लिए AOSP से लॉन्चर3 सोर्स कोड को भी संशोधित किया है। यह स्टॉक एंड्रॉइड 7.1.1 लॉन्चर का एक सीधा क्लोन है, जिसमें फ्रीफॉर्म ऐप्स लॉन्च करने की अनुमति देने के लिए आवश्यक न्यूनतम संशोधन हैं। मैंने यह संशोधित लॉन्चर इस उम्मीद में प्रदान किया है कि अन्य डेवलपर्स अपने कस्टम लॉन्चरों में फ्रीफॉर्म विंडो लॉन्च करने के लिए समर्थन लागू करेंगे। तुम कर सकते हो स्रोत कोड देखें GitHub पर, या एक नमूना एपीके डाउनलोड करें.
मेरी आशा है कि कस्टम लॉन्चर के डेवलपर्स इस कोड का उपयोग कर सकते हैं और फ्रीफॉर्म लॉन्च करने के लिए समर्थन सक्षम कर सकते हैं उन उपयोगकर्ताओं के लिए विंडो ऐप्स जो अपनी बड़ी स्क्रीन पर विंडो प्रबंधन के लिए अधिक लचीलेपन की इच्छा रखते हैं उपकरण।