การนำทางด้านล่าง
สร้างการนำทางด้านล่างแบบแท็บ
การนำทางด้านล่าง เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
แถบนำทางด้านล่าง
แอปจำนวนมากวางส่วนหลักของแอปไว้ในแถบนำทางด้านล่าง Compose มี NavigationBar และ NavigationBarItem สำหรับงานนี้
NavigationBar
NavigationBar คือคอนเทนเนอร์ ซึ่งโดยปกติจะวางไว้ในช่อง bottomBar ของ Scaffold และใช้บรรจุ NavigationBarItem หลายรายการ
NavigationBar {
// items go here
}NavigationBarItem
แท็บแต่ละรายการคือ NavigationBarItem ที่มี icon, label ที่ไม่จำเป็นต้องมี, สถานะ selected และ onClick
NavigationBarItem(
selected = true,
onClick = { },
icon = { Icon(Icons.Default.Home, contentDescription = "Home") },
label = { Text("Home") }
)จำลองข้อมูลแท็บ
กำหนดแท็บเป็นข้อมูลเพื่อให้คุณวนซ้ำผ่านแท็บเหล่านั้นได้ คลาสข้อมูลอย่างง่ายที่มีเส้นทาง ป้ายกำกับ และไอคอนเหมาะกับงานนี้
data class Tab(val route: String, val label: String, val icon: ImageVector)
val tabs = listOf(
Tab("home", "Home", Icons.Default.Home),
Tab("profile", "Profile", Icons.Default.Person)
)ติดตามเส้นทางปัจจุบัน
หากต้องการเน้นแท็บที่ใช้งานอยู่ คุณต้องทราบเส้นทางปัจจุบัน โดยอ่านค่าจากรายการปัจจุบันในสแตกย้อนกลับของตัวควบคุม
val backStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = backStackEntry?.destination?.routeกำหนดรายการที่เลือก
เปรียบเทียบเส้นทางของแต่ละแท็บกับ currentRoute เพื่อตั้งค่าสถานะ selected ทำให้แถบเน้นรายการที่ถูกต้อง
NavigationBarItem(
selected = currentRoute == tab.route,
onClick = { navController.navigate(tab.route) },
icon = { Icon(tab.icon, contentDescription = tab.label) },
label = { Text(tab.label) }
)หลีกเลี่ยงการสะสมในสแตกย้อนกลับ
การแตะแท็บซ้ำ ๆ ไม่ควรทำให้ปลายทางสะสมเพิ่มขึ้น ใช้ popUpTo กับปลายทางเริ่มต้น รวมกับ launchSingleTop เมื่อนำทางระหว่างแท็บ
navController.navigate(tab.route) {
popUpTo(navController.graph.startDestinationId) { saveState = true }
launchSingleTop = true
restoreState = true
}saveState / restoreState
saveState และ restoreState จะรักษาตำแหน่งการเลื่อนและสถานะของแต่ละแท็บไว้เมื่อคุณเปลี่ยนไปแท็บอื่นแล้วกลับมา ซึ่งเป็นพฤติกรรมที่คาดหวังสำหรับแท็บด้านล่าง
ผสานรวมกับ Scaffold
ครอบทุกอย่างไว้ใน Scaffold วางแถบไว้ใน bottomBar และวาง NavHost ไว้ในเนื้อหา โดยใช้ระยะขอบที่มีให้เพื่อไม่ให้เนื้อหาถูกแถบบัง
Scaffold(
bottomBar = { BottomBar(navController) }
) { padding ->
NavHost(
navController,
startDestination = "home",
modifier = Modifier.padding(padding)
) { /* destinations */ }
}วนซ้ำรายการ
สร้างแถบด้วยการวนซ้ำผ่านรายการแท็บ ซึ่งช่วยให้โค้ดสั้นและมีรูปแบบสอดคล้องกัน
NavigationBar {
tabs.forEach { tab ->
NavigationBarItem(
selected = currentRoute == tab.route,
onClick = { navController.navigate(tab.route) },
icon = { Icon(tab.icon, contentDescription = tab.label) },
label = { Text(tab.label) }
)
}
}นำทุกอย่างมาประกอบกัน
แถบด้านล่างแบบเต็มที่เชื่อมต่อกับตัวควบคุมและเน้นแท็บที่ใช้งานอยู่
@Composable
fun BottomBar(navController: NavController) {
val entry by navController.currentBackStackEntryAsState()
val current = entry?.destination?.route
NavigationBar {
tabs.forEach { tab ->
NavigationBarItem(
selected = current == tab.route,
onClick = { navController.navigate(tab.route) },
icon = { Icon(tab.icon, contentDescription = tab.label) },
label = { Text(tab.label) }
)
}
}
}ตรวจสอบความเข้าใจ
คุณจะทราบได้อย่างไรว่า NavigationBarItem รายการใดควรกำหนดให้เป็น selected
สรุปทบทวน
การนำทางด้านล่าง:
NavigationBarใช้บรรจุNavigationBarItem- ติดตามแท็บที่ใช้งานอยู่ผ่าน
currentBackStackEntryAsState()และกำหนดค่าselected - ใช้
popUpTo+launchSingleTop+saveState/restoreStateเพื่อสลับแท็บอย่างเป็นระเบียบ - วางไว้ใน
bottomBarของScaffold
คำถามที่พบบ่อย
บทเรียน “การนำทางด้านล่าง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การนำทางด้านล่าง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การนำทางด้านล่าง”
สร้างการนำทางด้านล่างแบบแท็บ คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การนำทางด้านล่าง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า NavHost
- การนำทางระหว่างหน้าจอ
- การส่งอาร์กิวเมนต์
- การนำทางด้านล่าง