إخفاء شريط الحالة

يصف هذا الدرس كيفية إخفاء شريط الحالة في إصدارات مختلفة من Android يتيح إخفاء شريط الحالة (وشريط التنقل اختياريًا) يستخدم المحتوى مساحة عرض أكبر، ما يوفّر تجربة أكثر تفاعلية للمستخدم.

يعرض الشكل 1 تطبيقًا به شريط حالة مرئي:

أشرطة النظام

الشكل 1. شريط الحالة المرئي

يعرض الشكل 2 تطبيقًا بشريط حالة مخفي. تجدر الإشارة إلى أنّ شريط الإجراءات مخفي أيضًا. ينبغي ألا تعرض أبدًا شريط الإجراءات بدون شريط الحالة.

أشرطة النظام

الشكل 2. شريط الحالة المخفي

إخفاء شريط الحالة في 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 (سواء من خلال أحد مواضيع النشاط أو برمجيًا)، تبقى العلامات سارية ما لم يمحوها تطبيقك.

يمكنك استخدام FLAG_LAYOUT_IN_SCREEN لضبط تنسيق نشاطك لاستخدام منطقة الشاشة نفسها التي تكون متاحة عند تفعيل هذه الميزة FLAG_FULLSCREEN يمنع هذا الإجراء من تغيير حجم المحتوى عند إخفاء شريط الحالة وعرضه.

إخفاء شريط الحالة في Android 4.1 والإصدارات الأعلى

يمكنك إخفاء شريط الحالة في الإصدار 4.1 من نظام التشغيل Android (المستوى 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 لمساعدة تطبيقك في الحفاظ على تخطيط ثابت.

عند استخدام هذا النهج، تصبح مسئولية ضمان تنفيذ الأجزاء المهمة واجهة المستخدم في التطبيق (على سبيل المثال، عناصر التحكم المضمنة في تطبيق الخرائط) تغطيته أشرطة النظام. وقد يجعل ذلك تطبيقك غير قابل للاستخدام. في معظم الحالات، يمكنك يمكنك معالجة هذا الأمر عن طريق إضافة السمة android:fitsSystemWindows إلى ملف تنسيق XML، والتعيين على true يؤدي هذا إلى تعديل المساحة المتروكة لـ ViewGroup الرئيسي لترك مساحة لنوافذ النظام. وهذا يكفي لمعظم التطبيقات.

ومع ذلك، قد تحتاج في بعض الحالات إلى تعديل المساحة المتروكة الافتراضية للحصول على المساحة المتروكة المطلوبة لتصميم تطبيقك. لمعالجة كيفية يتم تصميم المحتوى نسبةً إلى أشرطة النظام (التي تشغل مساحة تعرف باسم "العناصر الداخلية للمحتوى")، إلغاء fitSystemWindows(Rect insets). يتم استدعاء طريقة fitSystemWindows() بواسطة عرض هرمي عندما يتم تغيير إدراج المحتوى الخاص بالنافذة، للسماح للنافذة بتعديل محتواه وفقًا لذلك. بتجاوز هذه الطريقة، يمكنك التعامل مع الداخلية (وبالتالي تنسيق تطبيقك) بالطريقة التي تريدها.