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

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

الشكل 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 لإظهار أشرطة النظام المخفية مؤقتًا باستخدام إيماءات النظام، مثل المرْر سريعًا من حافة الشاشة التي يكون الشريط مخفيًا منها. تُظهر هذه أشرطة النظام المؤقتة فوق محتوى تطبيقك، وقد تتمتع بدرجة من الشفافية، ويتم إخفاؤها تلقائيًا بعد مهلة قصيرة.