स्टेटस बार छिपाएं

इस लेसन में बताया गया है कि अलग-अलग वर्शन पर स्टेटस बार कैसे छिपाया जाए Android. स्टेटस बार (और वैकल्पिक रूप से, नेविगेशन बार) को छिपाने से कॉन्टेंट, डिसप्ले के लिए ज़्यादा जगह का इस्तेमाल करता है. इससे उपयोगकर्ता को बेहतरीन अनुभव मिलता है.

पहली इमेज में, स्टेटस बार वाला ऐप्लिकेशन दिखाया गया है:

सिस्टम बार

पहला डायग्राम. स्टेटस बार दिख रहा है.

दूसरी इमेज में, छिपे हुए स्टेटस बार वाला ऐप्लिकेशन दिखाया गया है. ध्यान दें कि कार्रवाई बार भी छिपा हुआ होता है. स्टेटस बार के बिना, आपको कभी भी ऐक्शन बार नहीं दिखाना चाहिए.

सिस्टम बार

दूसरा डायग्राम. छिपा हुआ स्टेटस बार.

Android 4.0 और इससे पहले के वर्शन पर स्टेटस बार को छिपाएं

Android 4.0 (एपीआई लेवल 14) और इससे पहले के वर्शन वाले डिवाइसों पर स्टेटस बार को छिपाया जा सकता है WindowManager फ़्लैग. इसे प्रोग्रैम्ड तरीके से या इस तरीके से किया जा सकता है: अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में गतिविधि थीम सेट करने का विकल्प भी होगा. अपने ऐप्लिकेशन में गतिविधि थीम सेट करना अगर स्टेटस बार को हमेशा के लिए सेट करना है, तो मेनिफ़ेस्ट फ़ाइल का इस्तेमाल करें आपके ऐप्लिकेशन में छिपा हुआ है (हालांकि सख्ती से बोलने पर, आप प्रोग्रामेटिक तरीके से थीम). उदाहरण के लिए:

<application
    ...
    android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
    ...
</application>

ऐक्टिविटी थीम को इस्तेमाल करने के फ़ायदे यहां दिए गए हैं:

  • प्रोग्राम के हिसाब से फ़्लैग सेट करने के मुकाबले, इसे इस्तेमाल करना आसान है. साथ ही, इसमें गड़बड़ी की संभावना भी कम होती है.
  • इसकी वजह से, यूज़र इंटरफ़ेस (यूआई) का ट्रांज़िशन आसानी से हो जाता है, क्योंकि सिस्टम के पास ज़रूरी जानकारी मौजूद होती है का इस्तेमाल करें.

इसके अलावा, प्रोग्राम बनाकर WindowManager फ़्लैग भी सेट किए जा सकते हैं. इस तरीके से, उपयोगकर्ता के इंटरैक्ट करने पर स्टेटस बार को छिपाना और दिखाना आसान हो जाता है आपका ऐप्लिकेशन:

Kotlin

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN)
        }
        setContentView(R.layout.activity_main)
    }
    ...
}

Java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        setContentView(R.layout.activity_main);
    }
    ...
}

जब WindowManager फ़्लैग सेट किए जाते हैं (किसी गतिविधि थीम के ज़रिए या प्रोग्रामेटिक रूप से), फ़्लैग तब तक प्रभावी रहते हैं, जब तक कि आपका ऐप्लिकेशन उन्हें हटा नहीं देता.

Google Analytics 4 पर माइग्रेट करने के लिए, FLAG_LAYOUT_IN_SCREEN अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है आपकी गतिविधि का लेआउट सेट करने के लिए, स्क्रीन की उसी जगह का इस्तेमाल किया जा सकता है जो चालू होने पर दिखती है FLAG_FULLSCREEN. यह आपके कॉन्टेंट को साइज़ बदलने से रोका जाता है. ऐसा तब होता है, जब स्टेटस बार छिपता और दिखता है.

Android 4.1 और उसके बाद वाले वर्शन पर स्थिति बार छिपाएं

Android 4.1 (एपीआई लेवल 16) और उसके बाद वाले वर्शन पर, स्टेटस बार को setSystemUiVisibility() का इस्तेमाल करके. setSystemUiVisibility(), यूज़र इंटरफ़ेस (यूआई) फ़्लैग को इस पर सेट करता है व्यक्तिगत व्यू लेवल; ये सेटिंग विंडो लेवल पर एग्रीगेट होती हैं. इसका इस्तेमाल किया जा रहा है यूज़र इंटरफ़ेस (यूआई) फ़्लैग सेट करने के लिए setSystemUiVisibility() आपको अपने सिस्टम बार पर ज़्यादा बारीकी से कंट्रोल देता है, जबकि WindowManager फ़्लैग. यह स्निपेट स्टेटस बार को छिपा देता है:

Kotlin

// Hide the status bar.
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
actionBar?.hide()

Java

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();

यहां दी गई बातों का ध्यान रखें:

  • यूज़र इंटरफ़ेस (यूआई) फ़्लैग हटाने के बाद (उदाहरण के लिए, ऐक्टिविटी) है, तो बार को दोबारा छिपाने के लिए, आपके ऐप्लिकेशन को उन्हें रीसेट करना होगा. देखें यूज़र इंटरफ़ेस (यूआई) के दिखने से जुड़े बदलावों के मुताबिक जवाब देना यूज़र इंटरफ़ेस (यूआई) के दिखने की सेटिंग में हुए बदलावों के बारे में चर्चा करना, ताकि आपका ऐप्लिकेशन उसी के हिसाब से जवाब देना.
  • जहां आप यूज़र इंटरफ़ेस (यूआई) फ़्लैग सेट करते हैं, वहां इसका बहुत असर पड़ता है. अगर आप अपनी ऐक्टिविटी की इमेज में सिस्टम बार छिपाते हैं, तो onCreate() तरीका इस्तेमाल करने पर और उपयोगकर्ता होम बटन दबाता है, तो सिस्टम बार उन्हें फिर से दिखाया जा सके. जब उपयोगकर्ता गतिविधि को फिर से खोलता है, तो onCreate() कॉल नहीं किया जाएगा, इसलिए सिस्टम बार दिखते रहेंगे. अगर आपको सिस्टम के यूज़र इंटरफ़ेस (यूआई) में बदलाव करना है, तो उपयोगकर्ता के आपकी गतिविधि में जाने और उससे बाहर जाने पर भी बनी रहती है. इसके लिए, अपनी रिपोर्ट में यूज़र इंटरफ़ेस (यूआई) फ़्लैग सेट करें onResume() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है या onWindowFocusChanged().
  • तरीका setSystemUiVisibility() इसका असर सिर्फ़ तब होता है, जब वह व्यू दिख रहा हो जिससे आपने उसे कॉल किया है.
  • व्यू से दूर जाने से फ़्लैग होती हैं setSystemUiVisibility() के साथ सेट करें हटाना होगा.

कॉन्टेंट को स्टेटस बार के पीछे दिखाएं

Android 4.1 और उसके बाद के वर्शन पर, आप अपने ऐप्लिकेशन की सामग्री को पीछे दिखाई देने के लिए सेट कर सकते हैं ताकि स्टेटस बार के छिपने और दिखने पर कॉन्टेंट का साइज़ न बदलें. ऐसा करने के लिए, SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. आपको यह सुझाव भी देना पड़ सकता है कि SYSTEM_UI_FLAG_LAYOUT_STABLE, ताकि आपका ऐप्लिकेशन स्थिर लेआउट.

इस तरीके का इस्तेमाल करने पर, यह पक्का करना आपकी ज़िम्मेदारी हो जाती है कि आपके ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) (उदाहरण के लिए, Maps ऐप्लिकेशन में पहले से मौजूद कंट्रोल), पूरी तरह खत्म नहीं होता भी शामिल होती है. इससे आपके ऐप्लिकेशन को इस्तेमाल नहीं किया जा सकेगा. ज़्यादातर मामलों में आप इसे मैनेज करने के लिए, अपनी एक्सएमएल लेआउट फ़ाइल में android:fitsSystemWindows एट्रिब्यूट जोड़ें. इसके लिए, true. इससे पैरंट ViewGroup की पैडिंग (जगह) में बदलाव होता है ताकि सिस्टम विंडो के लिए जगह छोड़ी जा सके. यह ज़्यादातर ऐप्लिकेशन के लिए काफ़ी होता है.

हालांकि, कुछ मामलों में आपको अपनी पसंद के हिसाब से पैडिंग (जगह) पाने के लिए डिफ़ॉल्ट पैडिंग में बदलाव करना पड़ सकता है लेआउट चुनें. सीधे तौर पर बदलाव करने के लिए, कॉन्टेंट, सिस्टम बार (जो विंडो की विंडो "कॉन्टेंट इनसेट"), fitSystemWindows(Rect insets) को बदलें. fitSystemWindows() तरीके को किसी विंडो के लिए कॉन्टेंट इनसेट में बदलाव होने पर, हैरारकी देखने के लिए, ताकि विंडो उसके हिसाब से कॉन्टेंट में बदलाव कर सकते हैं. इस विधि को ओवरराइड करके आप इनसेट (और इसलिए आपके ऐप्लिकेशन का लेआउट) को मनमुताबिक बनाएं.