คอมโพเนนต์ลิ้นชักการนำทางคือเมนูแบบเลื่อนเข้าที่ช่วยให้ผู้ใช้ไปยังส่วนต่างๆ ของแอปได้ โดยผู้ใช้สามารถเปิดใช้งานลิ้นชักการนำทางด้วยการปัดจากด้านข้างหรือแตะไอคอนเมนู
พิจารณากรณีการใช้งาน 3 กรณีต่อไปนี้ในการใช้ Navigation Drawer
- การจัดระเบียบเนื้อหา: อนุญาตให้ผู้ใช้สลับระหว่างหมวดหมู่ต่างๆ เช่น ในแอปข่าวหรือการเขียนบล็อก
- การจัดการบัญชี: แสดงลิงก์ด่วนไปยังการตั้งค่าบัญชีและส่วนโปรไฟล์ในแอปที่มีบัญชีผู้ใช้
- การค้นพบฟีเจอร์: จัดระเบียบฟีเจอร์และการตั้งค่าหลายรายการไว้ในเมนูเดียวเพื่ออำนวยความสะดวกในการค้นพบและการเข้าถึงของผู้ใช้ในแอปที่ซับซ้อน
ใน Material Design ลิ้นชักการนำทางมี 2 ประเภท ได้แก่
- มาตรฐาน: แชร์พื้นที่ภายในหน้าจอกับเนื้อหาอื่นๆ
- โมดัล: ปรากฏเหนือเนื้อหาอื่นๆ ภายในหน้าจอ
![](https://developer.android.google.cn/static/develop/ui/compose/images/layouts/material/m3-navigation-drawer.png?authuser=5&hl=th)
ตัวอย่าง
คุณสามารถใช้คอมโพสิชัน 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
นอกจากนี้ คุณยังเรียกใช้ฟังก์ชันการระงับเพื่อตอบสนองต่อเหตุการณ์ UI ได้ด้วย
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
จะจัดเรียงองค์ประกอบลิ้นชักในแนวตั้ง - คอมโพสิเบิล
NavigationDrawerItem
แสดงถึงแต่ละรายการในลิ้นชัก Scaffold
มีโครงสร้างพื้นฐานของหน้าจอ ซึ่งรวมถึงTopAppBar
navigationIcon
ในTopAppBar
จะควบคุมสถานะเปิดและปิดของลิ้นชัก
ผลลัพธ์
รูปภาพต่อไปนี้แสดงลักษณะที่ลิ้นชักปรากฏขึ้นเมื่อเปิดขึ้น โดยมีส่วนต่างๆ และรายการที่แสดง
![ลิ้นชักการนำทางแบบละเอียดที่มี 2 ส่วน โดยแต่ละส่วนจะมีรายการและไอคอนที่ติดป้ายกำกับไว้หลายรายการ](https://developer.android.google.cn/static/develop/ui/compose/images/components/drawer-detailed.png?authuser=5&hl=th)
แหล่งข้อมูลเพิ่มเติม
- Material Design: ลิ้นชักการนำทาง