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

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

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