คอมโพเนนต์สแน็กบาร์ทำหน้าที่เป็นการแจ้งเตือนสั้นๆ ที่ปรากฏที่ด้านล่างของหน้าจอ ซึ่งจะให้ความคิดเห็นเกี่ยวกับการดำเนินการหรือการกระทำโดยไม่รบกวนประสบการณ์ของผู้ใช้ แถบแสดงสถานะจะหายไปหลังจากผ่านไป 2-3 วินาที ผู้ใช้ยังปิดการแจ้งเตือนได้ด้วยการดำเนินการ เช่น แตะปุ่ม
พิจารณากรณีการใช้งาน 3 กรณีต่อไปนี้ที่คุณอาจใช้แถบแสดงสถานะ
- การยืนยันการดำเนินการ: หลังจากผู้ใช้ลบอีเมลหรือข้อความ แถบแสดงสถานะจะปรากฏขึ้นเพื่อยืนยันการดำเนินการและเสนอตัวเลือกเลิกทำ
- สถานะเครือข่าย: เมื่อแอปขาดการเชื่อมต่ออินเทอร์เน็ต แถบแสดงสถานะจะปรากฏขึ้นเพื่อแจ้งว่าแอปออฟไลน์อยู่
- การส่งข้อมูล: เมื่อส่งแบบฟอร์มหรืออัปเดตการตั้งค่าเรียบร้อยแล้ว แถบแสดงสถานะจะแจ้งว่าบันทึกการเปลี่ยนแปลงเรียบร้อยแล้ว
ตัวอย่างพื้นฐาน
หากต้องการใช้แถบแสดงสถานะ ให้สร้าง SnackbarHost ก่อน ซึ่งมีพร็อพเพอร์ตี้ SnackbarHostState SnackbarHostState ให้สิทธิ์เข้าถึงฟังก์ชัน showSnackbar() ซึ่งคุณใช้แสดงแถบแสดงสถานะได้
ฟังก์ชันการระงับนี้ต้องใช้ CoroutineScope เช่น ฟังก์ชันที่แสดงผลโดย rememberCoroutineScope และสามารถเรียกใช้เพื่อตอบสนองต่อเหตุการณ์ UI เพื่อแสดง Snackbar ภายใน Scaffold
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { snackbarHostState.showSnackbar("Snackbar") } } ) } ) { contentPadding -> // Screen content }
แถบแสดงสถานะพร้อมการดำเนินการ
คุณสามารถระบุการดำเนินการที่ไม่บังคับและปรับระยะเวลาของSnackbarได้
ฟังก์ชัน snackbarHostState.showSnackbar() ยอมรับพารามิเตอร์ actionLabel และ duration เพิ่มเติม และแสดงผล SnackbarResult
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { val result = snackbarHostState .showSnackbar( message = "Snackbar", actionLabel = "Action", // Defaults to SnackbarDuration.Short duration = SnackbarDuration.Indefinite ) when (result) { SnackbarResult.ActionPerformed -> { /* Handle snackbar action performed */ } SnackbarResult.Dismissed -> { /* Handle snackbar dismissed */ } } } } ) } ) { contentPadding -> // Screen content }
คุณสามารถระบุ Snackbar ที่กำหนดเองได้ด้วยพารามิเตอร์ snackbarHost ดูข้อมูลเพิ่มเติมได้ที่เอกสารอ้างอิง API ของ SnackbarHost
ข้อมูลสำคัญ
actionLabel = "Action": ตั้งค่าข้อความบนปุ่มดำเนินการduration = SnackbarDuration.Indefinite: แสดงแถบแสดงสถานะจนกว่าผู้ใช้หรือโปรแกรมจะปิดSnackbarResult.ActionPerformed: บ่งบอกว่าผู้ใช้คลิกปุ่มดำเนินการของแถบแสดงสถานะSnackbarResult.Dismissed: แสดงว่าผู้ใช้ปิดแถบแสดงสถานะโดยไม่คลิกปุ่มดำเนินการ