إخفاء أشرطة النظام للوضع الغامر

يُفضَّل مشاهدة بعض المحتوى في وضع ملء الشاشة بدون أي مؤشرات في شريط الحالة أو شريط التنقّل. تتضمن بعض الأمثلة مقاطع الفيديو والألعاب ومعارض الصور والكتب وشرائح العروض التقديمية. ويُعرف هذا باسم الوضع الشامل. توضِّح هذه الصفحة كيفية جذب المستخدمين بشكلٍ أكبر من خلال المحتوى في وضع ملء الشاشة.

الشكل 1. مثال على الوضع المجسم

يساعد "الوضع الغامر" المستخدمين في تجنُّب الخروج من اللعبة بدون قصد، ويمنحهم تجربة غامرة للاستفادة من الصور والفيديوهات والكتب. ومع ذلك، انتبه إلى عدد المرات التي ينتقل فيها المستخدمون من التطبيقات ويعودون إليها للاطّلاع على الإشعارات، ولإجراء عمليات بحث مفاجئة، أو اتّخاذ إجراءات أخرى. بما أنّ الوضع الشامل يحرم المستخدمين من الوصول بسهولة إلى تنقّل النظام، يجب عدم استخدام الوضع الشامل إلا عندما تتجاوز فائدة تجربة المستخدم استخدام المساحة المضافة على الشاشة فقط.

استخدِم WindowInsetsControllerCompat.hide() لإخفاء أشرطة النظام وWindowInsetsControllerCompat.show() لإعادتها.

يعرض المقتطف التالي مثالاً على ضبط زر لإخفاء بارات النظام وعرضها.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    ...

    val windowInsetsController =
        WindowCompat.getInsetsController(window, window.decorView)
    // Configure the behavior of the hidden system bars.
    windowInsetsController.systemBarsBehavior =
        WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE

    // Add a listener to update the behavior of the toggle fullscreen button when
    // the system bars are hidden or revealed.
    ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, windowInsets ->
        // You can hide the caption bar even when the other system bars are visible.
        // To account for this, explicitly check the visibility of navigationBars()
        // and statusBars() rather than checking the visibility of systemBars().
        if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
            || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
            binding.toggleFullscreenButton.setOnClickListener {
                // Hide both the status bar and the navigation bar.
                windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
            }
        } else {
            binding.toggleFullscreenButton.setOnClickListener {
                // Show both the status bar and the navigation bar.
                windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
            }
        }
        ViewCompat.onApplyWindowInsets(view, windowInsets)
    }
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    WindowInsetsControllerCompat windowInsetsController =
            WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
    // Configure the behavior of the hidden system bars.
    windowInsetsController.setSystemBarsBehavior(
            WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    );

    // Add a listener to update the behavior of the toggle fullscreen button when
    // the system bars are hidden or revealed.
    ViewCompat.setOnApplyWindowInsetsListener(
        getWindow().getDecorView(),
        (view, windowInsets) -> {
        // You can hide the caption bar even when the other system bars are visible.
        // To account for this, explicitly check the visibility of navigationBars()
        // and statusBars() rather than checking the visibility of systemBars().
        if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
                || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
            binding.toggleFullscreenButton.setOnClickListener(v -> {
                // Hide both the status bar and the navigation bar.
                windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());
            });
        } else {
            binding.toggleFullscreenButton.setOnClickListener(v -> {
                // Show both the status bar and the navigation bar.
                windowInsetsController.show(WindowInsetsCompat.Type.systemBars());
            });
        }
        return ViewCompat.onApplyWindowInsets(view, windowInsets);
    });
}

يمكنك اختياريًا تحديد نوع أشرطة النظام المطلوب إخفاؤها وتحديد سلوكها عندما يتفاعل معها المستخدم.

تحديد أشرطة النظام التي تريد إخفاءها

لتحديد نوع أشرطة النظام المطلوب إخفاؤها، نقْل إحدى المَعلمات التالية إلى WindowInsetsControllerCompat.hide().

تحديد سلوك أشرطة النظام المخفية

استخدِم WindowInsetsControllerCompat.setSystemBarsBehavior() لتحديد سلوك أشرطة النظام المخفية عندما يتفاعل المستخدم معها.

  • استخدِم رمز WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH لإظهار أشرطة النظام المخفية عند أي تفاعل للمستخدِم على الشاشة المقابلة.

  • استخدِم WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE لإظهار أشرطة النظام المخفية في أي إيماءات للنظام، مثل التمرير سريعًا من حافة الشاشة التي يكون الشريط مخفيًا منها.

  • استخدِم WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE لإظهار أشرطة النظام المخفية مؤقتًا باستخدام إيماءات النظام، مثل المرْر سريعًا من حافة الشاشة التي يكون الشريط مخفيًا منها. تُظهر هذه أشرطة النظام المؤقتة فوق محتوى تطبيقك، وقد تتمتع بدرجة من الشفافية، ويتم إخفاؤها تلقائيًا بعد مهلة قصيرة.