แถบแสดงข้อความ

คอมโพเนนต์สแน็กบาร์ทำหน้าที่เป็นการแจ้งเตือนสั้นๆ ที่ปรากฏที่ด้านล่างของหน้าจอ ซึ่งจะให้ความคิดเห็นเกี่ยวกับการดำเนินการหรือการกระทำโดยไม่รบกวนประสบการณ์ของผู้ใช้ แถบแสดงสถานะจะหายไปหลังจากผ่านไป 2-3 วินาที ผู้ใช้ยังปิดการแจ้งเตือนได้ด้วยการดำเนินการ เช่น แตะปุ่ม

พิจารณากรณีการใช้งาน 3 กรณีต่อไปนี้ที่คุณอาจใช้แถบแสดงสถานะ

  • การยืนยันการดำเนินการ: หลังจากผู้ใช้ลบอีเมลหรือข้อความ แถบแสดงสถานะจะปรากฏขึ้นเพื่อยืนยันการดำเนินการและเสนอตัวเลือกเลิกทำ
  • สถานะเครือข่าย: เมื่อแอปขาดการเชื่อมต่ออินเทอร์เน็ต แถบแสดงสถานะจะปรากฏขึ้นเพื่อแจ้งว่าแอปออฟไลน์อยู่
  • การส่งข้อมูล: เมื่อส่งแบบฟอร์มหรืออัปเดตการตั้งค่าเรียบร้อยแล้ว แถบแสดงสถานะจะแจ้งว่าบันทึกการเปลี่ยนแปลงเรียบร้อยแล้ว
ตัวอย่างคอมโพเนนต์ UI ของแถบแสดงสถานะ
รูปที่ 1 ตัวอย่างแถบแสดงสถานะ

ตัวอย่างพื้นฐาน

หากต้องการใช้แถบแสดงสถานะ ให้สร้าง 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: แสดงว่าผู้ใช้ปิดแถบแสดงสถานะโดยไม่คลิกปุ่มดำเนินการ