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