סרגלי אפליקציות

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

סוג

מראה

המטרה

סרגל האפליקציה העליון

בחלק העליון של המסך.

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

סרגל האפליקציה התחתון

בתחתית המסך.

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

דוגמה לסרגל האפליקציות בחלק העליון ובחלק התחתון.
איור 1. שורת אפליקציות בחלק העליון (משמאל) ושורת אפליקציות בחלק התחתון (מימין).

כדי להטמיע סרגל אפליקציות בחלק העליון של המסך וסרגל אפליקציות בחלק התחתון, משתמשים ברכיבי ה-Composable‏ TopAppBar ו-BottomAppBar, בהתאמה. הם מאפשרים ליצור ממשקים עקביים שמכילים רכיבי ניווט ובקרה על פעולות, ועומדים בסטנדרטים של Material Design.

סרגי האפליקציות העליונים

בטבלה הבאה מפורטים ארבעת הסוגים של שורת האפליקציות העליונה:

סוג

דוגמה

קטן: למסכים שלא דורשים הרבה ניווט או פעולות.

סרגל אפליקציה קטן בחלק העליון

מיושר למרכז: למסכים שיש בהם פעולה ראשית אחת.

סרגל האפליקציה העליון מיושר למרכז

בינונית: למסכים שדורשים מידה בינונית של ניווט ופעולות.

סרגל אפליקציה עליון בינוני

גדול: למסכים שדורשים הרבה ניווט ופעולות.

סרגל עליון גדול של האפליקציה

ממשק API

הרכיבים השונים שמאפשרים להטמיע את ארבע שורות האפליקציות העליונות השונות דומים למדי. יש להם כמה פרמטרים עיקריים:

  • title: הטקסט שמופיע בסרגל האפליקציה.
  • navigationIcon: הסמל הראשי לניווט. מופיע בצד שמאל של סרגל האפליקציות.
  • actions: סמלים שמספקים למשתמש גישה לפעולות מפתח. הם מופיעים משמאל לסרגל האפליקציות.
  • scrollBehavior: קובע איך סרגל האפליקציות העליון מגיב לגלילה של התוכן הפנימי של התבנית.
  • colors: קובע איך סרגל האפליקציות יופיע.

התנהגות הגלילה

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

יש שלושה סוגים של TopAppBarScrollBehavior. אלה הם:

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

בדוגמאות הבאות מוטמעות כמה מהאפשרויות האלה.

דוגמאות

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

קטן

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

בדוגמה הבאה לא מועבר ל-TopAppBar ערך של scrollBehavior, ולכן הוא לא מגיב לגלילה של התוכן הפנימי.

@Composable
fun SmallTopAppBarExample() {
    Scaffold(
        topBar = {
            TopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text("Small Top App Bar")
                }
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

ההטמעה הזו נראית כך:

דוגמה לסרגל קטן בחלק העליון של האפליקציה.
איור 2. סרגל קטן בחלק העליון של האפליקציה.

יישור למרכז

סרגל האפליקציות העליון שמוגדר ליישור מרכז זהה למעשה לסרגל האפליקציות הקטן, אבל הכותרת ממוקמת במרכז הרכיב. כדי להטמיע את הרכיב הזה, צריך להשתמש ב-composable הייעודי CenterAlignedTopAppBar.

בדוגמה הזו נעשה שימוש ב-enterAlwaysScrollBehavior() כדי לקבל את הערך שהוא מעביר ל-scrollBehavior. לכן, הסרגל מתכווץ כשהמשתמש גולל את התוכן הפנימי של התבנית.

@Composable
fun CenterAlignedTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),

        topBar = {
            CenterAlignedTopAppBar(
                colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Centered Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior,
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

ההטמעה הזו נראית כך:

כאן כותבים את הטקסט החלופי
איור 3. סרגל אפליקציה עליון יישור למרכז.

בינוני

בסרגל האפליקציות הבינוני בחלק העליון, הכותרת ממוקמת מתחת לסמלים נוספים. כדי ליצור אחד, משתמשים ב-composable‏ MediumTopAppBar.

בדומה לקטע הקוד, בדוגמה הזו נעשה שימוש ב-enterAlwaysScrollBehavior() כדי לקבל את הערך שהוא מעביר ל-scrollBehavior.

@Composable
fun MediumTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
        topBar = {
            MediumTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Medium Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

כך נראית ההטמעה הזו, עם הדגמה של התנהגות הגלילה מ-enterAlwaysScrollBehavior():

איור 4. סרגל אפליקציות עליון שמיושר למרכז.

גדול

סרגל אפליקציה גדול בחלק העליון דומה לאמצעי ההגעה לאתר, אם כי המרווח בין הכותרת לסמלים גדול יותר, והוא תופס יותר מקום במסך באופן כללי. כדי ליצור רכיב כזה, משתמשים ברכיב ה-composable LargeTopAppBar.

בניגוד לקטעי הקוד הקודמים, בדוגמה הזו נעשה שימוש ב-exitUntilCollapsedScrollBehavior() כדי לקבל את הערך שהיא מעבירה בשביל scrollBehavior. לכן, הסרגל מתכווץ כשהמשתמש גולל את התוכן הפנימי של התבנית, אבל מתרחב כשהמשתמש גולל עד סוף התוכן הפנימי.

@Composable
fun LargeTopAppBarExample() {
    val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())

    Scaffold(
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
        topBar = {
            LargeTopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text(
                        "Large Top App Bar",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis
                    )
                },
                navigationIcon = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            imageVector = Icons.Filled.Menu,
                            contentDescription = "Localized description"
                        )
                    }
                },
                scrollBehavior = scrollBehavior
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

ההטמעה הזו נראית כך:

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

סרגל האפליקציה התחתון

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

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

@Composable
fun BottomAppBarExample() {
    Scaffold(
        bottomBar = {
            BottomAppBar(
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(Icons.Filled.Check, contentDescription = "Localized description")
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Edit,
                            contentDescription = "Localized description",
                        )
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Mic,
                            contentDescription = "Localized description",
                        )
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Image,
                            contentDescription = "Localized description",
                        )
                    }
                },
                floatingActionButton = {
                    FloatingActionButton(
                        onClick = { /* do something */ },
                        containerColor = BottomAppBarDefaults.bottomAppBarFabColor,
                        elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation()
                    ) {
                        Icon(Icons.Filled.Add, "Localized description")
                    }
                }
            )
        },
    ) { innerPadding ->
        Text(
            modifier = Modifier.padding(innerPadding),
            text = "Example of a scaffold with a bottom app bar."
        )
    }
}

היישום הזה נראה כך:

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

מקורות מידע נוספים