רכיב חלונית הזזה לניווט הוא תפריט שמופיע בהחלקה ומאפשר למשתמשים לנווט בין הקטעים השונים באפליקציה. כדי להפעיל אותו, המשתמשים יכולים להחליק מהצד או להקיש על סמל התפריט.
ריכזנו כאן שלושה תרחישים לדוגמה להטמעה של מגירת ניווט:
- ארגון התוכן: אפשרו למשתמשים לעבור בין קטגוריות שונות, כמו באפליקציות של חדשות או בלוגים.
- ניהול חשבון: קישורים מהירים להגדרות החשבון ולקטעי הפרופיל באפליקציות עם חשבונות משתמשים.
- גילוי תכונות: ארגון של כמה תכונות והגדרות בתפריט אחד כדי להקל על המשתמשים לגלות את התכונות ולגשת אליהן באפליקציות מורכבות.
ב-Material Design יש שני סוגים של מגירות ניווט:
- רגיל: שיתוף מקום במסך עם תוכן אחר.
- חלון מודאלי: מופיע מעל תוכן אחר במסך.
דוגמה
אפשר להשתמש בקומפוזבילי ModalNavigationDrawer כדי להטמיע חלונית הזזה לניווט.
משתמשים במשבצת drawerContent כדי לספק ModalDrawerSheet ואת התוכן של מגירת הצד, כמו בדוגמה הבאה:
ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { Text("Drawer title", modifier = Modifier.padding(16.dp)) HorizontalDivider() NavigationDrawerItem( label = { Text(text = "Drawer Item") }, selected = false, onClick = { /*TODO*/ } ) // ...other drawer items } } ) { // Screen content }
ModalNavigationDrawer מקבלת מספר פרמטרים נוספים של מגירה. לדוגמה, אפשר להגדיר אם חלונית ההזזה תגיב לגרירות באמצעות הפרמטר gesturesEnabled, כמו בדוגמה הבאה:
ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { // Drawer contents } }, gesturesEnabled = false ) { // Screen content }
התנהגות של פקדים
כדי לשלוט באופן הפתיחה והסגירה של מגירת האפליקציות, משתמשים במקש DrawerState. צריך להעביר DrawerState אל ModalNavigationDrawer באמצעות הפרמטר drawerState.
DrawerState מספק גישה לפונקציות open ו-close, וגם לנכסים שקשורים למצב הנוכחי של חלונית ההזזה. כדי להשתמש בפונקציות ההשעיה האלה צריך CoroutineScope, שאפשר ליצור באמצעות rememberCoroutineScope. אפשר גם לקרוא לפונקציות ההשעיה בתגובה לאירועים בממשק המשתמש.
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val scope = rememberCoroutineScope() ModalNavigationDrawer( drawerState = drawerState, drawerContent = { ModalDrawerSheet { /* Drawer content */ } }, ) { Scaffold( floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show drawer") }, icon = { Icon(Icons.Filled.Add, contentDescription = "") }, onClick = { scope.launch { drawerState.apply { if (isClosed) open() else close() } } } ) } ) { contentPadding -> // Screen content } }
יצירת קבוצות בחלונית הזזה לניווט
בקטע הקוד הבא אפשר לראות איך יוצרים חלונית הזזה לניווט מפורטת עם קטעים ומחיצות:
@Composable fun DetailedDrawerExample( content: @Composable (PaddingValues) -> Unit ) { val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val scope = rememberCoroutineScope() ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { Column( modifier = Modifier.padding(horizontal = 16.dp) .verticalScroll(rememberScrollState()) ) { Spacer(Modifier.height(12.dp)) Text("Drawer Title", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleLarge) HorizontalDivider() Text("Section 1", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleMedium) NavigationDrawerItem( label = { Text("Item 1") }, selected = false, onClick = { /* Handle click */ } ) NavigationDrawerItem( label = { Text("Item 2") }, selected = false, onClick = { /* Handle click */ } ) HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp)) Text("Section 2", modifier = Modifier.padding(16.dp), style = MaterialTheme.typography.titleMedium) NavigationDrawerItem( label = { Text("Settings") }, selected = false, icon = { Icon(Icons.Outlined.Settings, contentDescription = null) }, badge = { Text("20") }, // Placeholder onClick = { /* Handle click */ } ) NavigationDrawerItem( label = { Text("Help and feedback") }, selected = false, icon = { Icon(Icons.AutoMirrored.Outlined.Help, contentDescription = null) }, onClick = { /* Handle click */ }, ) Spacer(Modifier.height(12.dp)) } } }, drawerState = drawerState ) { Scaffold( topBar = { TopAppBar( title = { Text("Navigation Drawer Example") }, navigationIcon = { IconButton(onClick = { scope.launch { if (drawerState.isClosed) { drawerState.open() } else { drawerState.close() } } }) { Icon(Icons.Default.Menu, contentDescription = "Menu") } } ) } ) { innerPadding -> content(innerPadding) } } }
מידע חשוב על הקוד
- מאכלס את
drawerContentעםColumnשמכיל קטעים, קווים מפרידים ופריטי ניווט. -
ModalDrawerSheetמספקת סגנון Material Design לחלונית הזזה. HorizontalDividerמפריד בין הקטעים במגירה.-
ModalNavigationDrawerיוצר את המגירה. -
drawerContentמגדיר את התוכן של חלונית ההזזה. - בתוך
ModalDrawerSheet, הרכיבColumnמסדר את הרכיבים של חלונית ההזזה באופן אנכי. - רכיבי ה-Composable
NavigationDrawerItemמייצגים פריטים נפרדים בחלונית ההזזה. -
Scaffoldמספק את המבנה הבסיסי של המסך, כוללTopAppBar. - הלחצן
navigationIconבTopAppBarשולט במצב הפתוח והסגור של חלונית ההזזה.
תוצאה
בתמונה הבאה אפשר לראות איך חלונית ההזזה נראית כשהיא פתוחה, עם החלקים והפריטים שמוצגים בה:
מקורות מידע נוספים
- Material Design: חלונית הזזה לניווט