จัดการการดำเนินการของแป้นพิมพ์

เมื่อผู้ใช้โฟกัสที่มุมมองข้อความที่แก้ไขได้ เช่น องค์ประกอบ EditText และผู้ใช้มีแป้นพิมพ์ฮาร์ดแวร์ต่ออยู่ ระบบจะจัดการอินพุตทั้งหมด อย่างไรก็ตาม หากต้องการขัดจังหวะหรือจัดการการป้อนข้อมูลด้วยแป้นพิมพ์ด้วยตนเองโดยตรง คุณก็ทำได้โดยใช้เมธอดการเรียกกลับจากKeyEvent.Callbackหน้าเว็บ เช่น onKeyDown() และ onKeyMultiple()

ทั้งคลาส Activity และ View ใช้อินเทอร์เฟซ KeyEvent.Callback ดังนั้นโดยทั่วไปแล้วคุณจะต้องลบล้างเมธอดการเรียกกลับในการขยายคลาสเหล่านี้ตามความเหมาะสม

หมายเหตุ: เมื่อจัดการเหตุการณ์แป้นพิมพ์ด้วยคลาส KeyEvent และ API ที่เกี่ยวข้อง ให้คาดหวังว่าเหตุการณ์แป้นพิมพ์จะมาจากแป้นพิมพ์ฮาร์ดแวร์เท่านั้น อย่าพึ่งพาการรับเหตุการณ์การกดแป้นสําหรับแป้นใดๆ ในวิธีการป้อนข้อมูลแบบซอฟต์แวร์ (แป้นพิมพ์บนหน้าจอ)

จัดการเหตุการณ์สําคัญแบบแป้นเดียว

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

ตัวอย่างเช่น การใช้งานนี้จะตอบสนองต่อแป้นบนแป้นพิมพ์บางแป้นเพื่อควบคุมเกม

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        KeyEvent.KEYCODE_D -> {
            moveShip(MOVE_LEFT)
            true
        }
        KeyEvent.KEYCODE_F -> {
            moveShip(MOVE_RIGHT)
            true
        }
        KeyEvent.KEYCODE_J -> {
            fireMachineGun()
            true
        }
        KeyEvent.KEYCODE_K -> {
            fireMissile()
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_D:
            moveShip(MOVE_LEFT);
            return true;
        case KeyEvent.KEYCODE_F:
            moveShip(MOVE_RIGHT);
            return true;
        case KeyEvent.KEYCODE_J:
            fireMachineGun();
            return true;
        case KeyEvent.KEYCODE_K:
            fireMissile();
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

จัดการแป้นกดร่วม

หากต้องการตอบสนองต่อเหตุการณ์แป้นกดร่วม เช่น เมื่อมีการกดแป้นร่วมกับ Shift หรือ Control คุณสามารถค้นหา KeyEvent ที่ส่งไปยังเมธอดการเรียกกลับ หลายวิธีจะให้ข้อมูลเกี่ยวกับแป้นกดร่วม เช่น getModifiers() และ getMetaState() อย่างไรก็ตาม วิธีที่ง่ายที่สุดคือตรวจสอบว่ามีการกดแป้นตัวแก้ไขที่คุณต้องการด้วยวิธีการต่างๆ เช่น isShiftPressed() และ isCtrlPressed()

ตัวอย่างเช่น ต่อไปนี้คือการใช้งาน onKeyUp() อีกครั้ง พร้อมการจัดการเพิ่มเติมเมื่อกดแป้น Shift ค้างไว้พร้อมกับแป้นใดแป้นหนึ่ง

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        ...
        KeyEvent.KEYCODE_J -> {
            if (event.isShiftPressed) {
                fireLaser()
            } else {
                fireMachineGun()
            }
            true
        }
        KeyEvent.KEYCODE_K -> {
            if (event.isShiftPressed) {
                fireSeekingMissle()
            } else {
                fireMissile()
            }
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        ...
        case KeyEvent.KEYCODE_J:
            if (event.isShiftPressed()) {
                fireLaser();
            } else {
                fireMachineGun();
            }
            return true;
        case KeyEvent.KEYCODE_K:
            if (event.isShiftPressed()) {
                fireSeekingMissle();
            } else {
                fireMissile();
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

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