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

ไอคอนการให้ดาว 4 ดวง

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

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

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

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

ส่วนผสม

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

ขั้นตอน

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

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

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

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

  • onPreviewKeyEvent — ส่งเหตุการณ์ไปยังองค์ประกอบย่อยรายการแรก
  • onKeyEvent — ส่งเหตุการณ์ไปยังองค์ประกอบหลักของ Composable

2. กรองและจัดการการกดแป้นเว้นวรรค

ภายใน Lambda ตัวแก้ไข onPreviewKeyEvent หรือ onKeyEvent ให้กรองเหตุการณ์สำคัญที่การปล่อยแป้น (KeyEventType.KeyUp) ตรงกับแป้นเว้นวรรค (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 เพื่อหยุดชั่วคราวและเล่นวิดีโอหรือสื่ออื่นๆ ต่อได้แล้ว

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

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