הסתרת סרגלי המערכת למצב של צפייה היקפית

חלק מהתוכן הכי נעים לצפות בו במסך מלא, בלי אינדיקטורים בסרגל הסטטוס או בסרגל הניווט. לדוגמה: סרטונים, משחקים, גלריות תמונות, ספרים ושקופיות של מצגות. המצב הזה נקרא מצב אימרסיבי. בדף הזה נסביר איך אפשר לעורר עניין רב יותר בקרב המשתמשים באמצעות תוכן במסך מלא.

איור 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 כדי לחשוף באופן זמני את סרחי המערכת המוסתרים באמצעות תנועות מערכת, כמו החלקה מהקצה של המסך שבו הסרגל מוסתר. שורות הסטטוס הזמניות האלה מופיעות על גבי תוכן האפליקציה, יכול להיות שהן שקופפות במידה מסוימת והן מוסתרות באופן אוטומטי אחרי זמן קצוב.