Khi người dùng tập trung vào một khung hiển thị văn bản có thể chỉnh sửa, chẳng hạn như
EditText
và người dùng có bàn phím phần cứng đi kèm, tất cả
đầu vào do hệ thống xử lý. Tuy nhiên, nếu bạn muốn chặn
hoặc trực tiếp tự xử lý việc nhập bằng bàn phím, bạn có thể thực hiện bằng cách triển khai các phương thức gọi lại
từ KeyEvent.Callback
giao diện, chẳng hạn như onKeyDown()
và onKeyMultiple()
.
Cả Activity
và lớp View
sẽ triển khai
KeyEvent.Callback
, vì vậy, bạn
thường sẽ ghi đè phương thức gọi lại trong phần mở rộng của các lớp này, như
phù hợp.
Lưu ý: Khi xử lý các sự kiện bàn phím bằng
KeyEvent
và các API liên quan,
dự kiến rằng các sự kiện bàn phím chỉ đến từ bàn phím phần cứng. Không bao giờ dựa vào nhận khoá
các sự kiện cho bất kỳ phím nào trên phương thức nhập mềm (bàn phím ảo).
Xử lý các sự kiện chính đơn lẻ
Để xử lý từng thao tác nhấn phím, hãy triển khai
onKeyDown()
hoặc onKeyUp()
,
khi phù hợp. Thông thường, bạn sử dụng
onKeyUp()
nếu muốn đảm bảo rằng bạn chỉ nhận được một sự kiện. Nếu người dùng nhấn và giữ một phím,
thì onKeyDown()
được gọi nhiều lần.
Ví dụ: phương thức triển khai này phản hồi một số phím trên bàn phím để điều khiển một trò chơi:
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); } }
Xử lý phím bổ trợ
Để phản hồi các sự kiện phím của phím bổ trợ, chẳng hạn như khi một phím được kết hợp với phím Shift
hoặc Control, bạn có thể
truy vấn KeyEvent
được truyền vào phương thức gọi lại. Một số phương pháp
cung cấp thông tin về các phím bổ trợ, chẳng hạn như
getModifiers()
và getMetaState()
.
Tuy nhiên, giải pháp đơn giản nhất là kiểm tra xem
phím bổ trợ chính xác mà bạn quan tâm đang được nhấn bằng các phương thức như
isShiftPressed()
và isCtrlPressed()
.
Ví dụ: dưới đây là cách triển khai onKeyUp()
một lần nữa, với cách xử lý bổ sung khi nhấn và giữ phím Shift bằng một trong các phím:
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); } }
Tài nguyên khác
- Trình trợ giúp phím tắt : màn hình hệ thống cho phép người dùng tìm kiếm phím tắt mà ứng dụng của bạn cung cấp.