หยุดการเล่นสื่อชั่วคราวและเล่นต่อด้วย Spacebar บนแป้นพิมพ์

ไอคอนคะแนน 4 ดาว

การเพิ่มประสิทธิภาพสำหรับหน้าจอขนาดใหญ่รวมถึงความสามารถในการจัดการอินพุตจากแป้นพิมพ์ภายนอก เช่น การตอบสนองต่อการกด Spacebar เพื่อหยุดชั่วคราวหรือ เล่นวิดีโอและสื่ออื่นๆ ต่อ ซึ่งมีประโยชน์อย่างยิ่งสำหรับแท็บเล็ตที่มักจะเชื่อมต่อกับแป้นพิมพ์ภายนอก และ Chromebook ที่มักจะมาพร้อมกับแป้นพิมพ์ภายนอก แต่สามารถใช้ในโหมดแท็บเล็ตได้

เมื่อสื่อเป็นองค์ประกอบเดียวของหน้าต่าง (เช่น การเล่นวิดีโอแบบเต็มหน้าจอ) ให้ตอบสนองต่อเหตุการณ์การกดแป้นที่ระดับหน้าจอใน Jetpack Compose

แนวทางปฏิบัติแนะนำ

เมื่อใดก็ตามที่แอปเล่นไฟล์สื่อ ผู้ใช้ควรจะหยุดชั่วคราวและเล่นต่อได้โดยการกด Spacebar บนแป้นพิมพ์จริง

ส่วนผสม

  • KEYCODE_SPACE: ค่าคงที่ของรหัสแป้นสำหรับ Spacebar
  • onPreviewKeyEvent: Modifier ที่ช่วยให้คอมโพเนนต์ดักจับเหตุการณ์แป้นฮาร์ดแวร์ได้เมื่อคอมโพเนนต์ (หรือคอมโพเนนต์ย่อยรายการใดรายการหนึ่ง) อยู่ในโฟกัส
  • onKeyEvent: Modifier นี้คล้ายกับ onPreviewKeyEvent โดยช่วยให้คอมโพเนนต์ดักจับเหตุการณ์แป้นฮาร์ดแวร์ได้เมื่อคอมโพเนนต์ (หรือคอมโพเนนต์ย่อยรายการใดรายการหนึ่ง) อยู่ในโฟกัส

ขั้นตอน

หากต้องการตอบสนองต่อการกดแป้นบนแป้นพิมพ์ใน Jetpack Compose แอปจะต้องรอรับเหตุการณ์การกดแป้น กรองเหตุการณ์ และตอบสนองต่อการกดแป้นที่เลือก เช่น การกดแป้น Spacebar

1. รอรับเหตุการณ์แป้นพิมพ์

เมื่อใช้ Jetpack Compose คุณสามารถใช้ประโยชน์จากตัวแก้ไข onPreviewKeyEvent หรือ onKeyEvent ภายในคอมโพเนนต์ที่จัดการการกดแป้น

ความแตกต่างหลักระหว่างตัวแก้ไขทั้งสองคือตำแหน่งที่จะส่งเหตุการณ์หากตัวแก้ไขไม่ใช้เหตุการณ์นั้น

  • onPreviewKeyEvent \- ส่งเหตุการณ์ไปยังคอมโพเนนต์ย่อยรายการแรก
  • onKeyEvent \- ส่งเหตุการณ์ไปยังคอมโพเนนต์หลักของคอมโพสได้

2. กรองและจัดการการกด Spacebar

ภายในแลมบ์ดาของตัวแก้ไข onPreviewKeyEvent หรือ onKeyEvent ให้กรองเหตุการณ์แป้นที่การปล่อยแป้น (KeyEventType.KeyUp) ตรงกับ Spacebar (Key.Spacebar)

แสดงผล true หากโค้ดจัดการเหตุการณ์และคุณไม่ต้องการให้เหตุการณ์แพร่กระจายต่อไป แสดงผล false เพื่ออนุญาตให้คอมโพเนนต์อื่นๆ จัดการเหตุการณ์

  • ตัวเลือก ก: ใช้ onPreviewKeyEvent

    Column(
        modifier = Modifier.onPreviewKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

  • ตัวเลือก ข: ใช้ onKeyEvent

    Column(
        modifier = Modifier.onKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

ผลลัพธ์

ตอนนี้แอปสามารถตอบสนองต่อการกดแป้น Spacebar เพื่อหยุดชั่วคราวและเล่นวิดีโอหรือสื่ออื่นๆ ต่อได้แล้ว

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์แป้นพิมพ์และวิธีจัดการได้ที่หัวข้อ จัดการอินพุตจากแป้นพิมพ์