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