คอมโพเนนต์ลิ้นชักการนำทางเป็นเมนูแบบเลื่อนเข้าที่ช่วยให้ผู้ใช้ไปยังส่วนต่างๆ ของแอปได้ ผู้ใช้จะเปิดใช้งานได้โดยเลื่อนจากด้านข้างหรือแตะไอคอนเมนู
พิจารณากรณีการใช้งาน 3 กรณีต่อไปนี้ในการใช้ Navigation Drawer
- การจัดระเบียบเนื้อหา: อนุญาตให้ผู้ใช้สลับระหว่างหมวดหมู่ต่างๆ เช่น ในแอปข่าวหรือการเขียนบล็อก
- การจัดการบัญชี: แสดงลิงก์ด่วนไปยังการตั้งค่าบัญชีและส่วนโปรไฟล์ในแอปที่มีบัญชีผู้ใช้
- การค้นพบฟีเจอร์: จัดระเบียบฟีเจอร์และการตั้งค่าหลายรายการไว้ในเมนูเดียวเพื่ออำนวยความสะดวกในการค้นพบและการเข้าถึงของผู้ใช้ในแอปที่ซับซ้อน
ใน Material Design ลิ้นชักการนำทางมี 2 ประเภท ได้แก่
- มาตรฐาน: แชร์พื้นที่ภายในหน้าจอกับเนื้อหาอื่นๆ
- โมดัล: ปรากฏเหนือเนื้อหาอื่นๆ ภายในหน้าจอ
ตัวอย่าง
คุณสามารถใช้คอมโพสิชัน 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 } }