विधि # 1:
पूरी तरह से पारदर्शी स्थिति पट्टी प्राप्त करने के लिए, आपको उपयोग करना होगा statusBarColor
, जो केवल एपीआई 21 और इसके बाद के संस्करण पर उपलब्ध है। windowTranslucentStatus
एपीआई 19 और इसके बाद के संस्करण पर उपलब्ध है, लेकिन यह स्थिति पट्टी के लिए एक रंगा हुआ पृष्ठभूमि जोड़ता है। हालाँकि, सेटिंग windowTranslucentStatus
एक चीज़ को प्राप्त करती है जो कि statusBarColor
पारदर्शी में नहीं बदलती : यह सेट SYSTEM_UI_FLAG_LAYOUT_STABLE
और SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
झंडे को सेट करती है । समान प्रभाव प्राप्त करने का सबसे आसान तरीका मैन्युअल रूप से इन झंडे को सेट करना है, जो प्रभावी रूप से एंड्रॉइड लेआउट सिस्टम द्वारा लगाए गए इनसेट को निष्क्रिय कर देता है और आपको अपने लिए छोड़ देता है।
आप इस onCreate
विधि को अपनी विधि में कहते हैं:
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
/Res/values-v21/styles.xml में पारदर्शिता सेट करना सुनिश्चित करें:
<item name="android:statusBarColor">@android:color/transparent</item>
या प्रोग्रामेटिकली पारदर्शिता सेट करें:
getWindow().setStatusBarColor(Color.TRANSPARENT);
इस दृष्टिकोण का अच्छा पक्ष यह है कि एपीआई लेआउट 19 पर समान लेआउट और डिज़ाइन का उपयोग टिंटेड पारभासी स्थिति पट्टी के लिए पारदर्शी स्थिति पट्टी का व्यापार करके भी किया जा सकता है।
<item name="android:windowTranslucentStatus">true</item>
विधि # 2:
यदि आपको केवल अपने स्टेटस बार के तहत एक बैकग्राउंड इमेज को पेंट करने की आवश्यकता है, तो इसके पीछे एक दृश्य की स्थिति के बजाय, यह आपकी गतिविधि की थीम की पृष्ठभूमि को वांछित इमेज में सेट करके और स्टेट बार की पारदर्शिता को सेट करने के द्वारा किया जा सकता है जैसा कि विधि # में दिखाया गया है। 1। यह वह तरीका था जिसका इस्तेमाल मैंने कुछ महीने पहले से एंड्रॉइड पुलिस लेख के लिए स्क्रीनशॉट बनाने के लिए किया था।
विधि # 3:
यदि आपको कुछ लेआउट के लिए मानक सिस्टम इनसेट्स को अनदेखा करना पड़ा है, जबकि उन्हें दूसरों में काम करते हुए रखा जाता है, तो ऐसा करने का एकमात्र व्यवहार्य अक्सर जुड़े हुए ScrimInsetsFrameLayout
वर्ग के साथ काम करना है । बेशक, उस वर्ग में किए गए कुछ चीजें सभी परिदृश्यों के लिए आवश्यक नहीं हैं। उदाहरण के लिए, यदि आप सिंथेटिक स्टेटस बार ओवरले का उपयोग करने की योजना नहीं बनाते हैं, तो बस init()
विधि में सब कुछ बताएं और attrs.xml फ़ाइल में कुछ भी जोड़ने से परेशान न हों। मैंने इस दृष्टिकोण को काम करते देखा है, लेकिन मुझे लगता है कि आप पाएंगे कि यह कुछ अन्य निहितार्थ लाता है जो कि बहुत सारे काम हो सकते हैं।
मैंने यह भी देखा कि आप कई लेआउट लपेटने का विरोध कर रहे हैं। एक लेआउट को दूसरे के अंदर लपेटने के मामले में, जहां दोनों की match_parent
ऊंचाई और चौड़ाई होती है, प्रदर्शन के निहितार्थ चिंता करने के लिए बहुत तुच्छ हैं। भले ही, आप उस स्थिति को पूरी तरह से बदल सकते हैं जिस वर्ग को वह FrameLayout
अपनी पसंद के किसी अन्य प्रकार के लेआउट वर्ग से बढ़ाता है । यह ठीक काम करेगा।
android:fitsSystemWindows="true"