Gdy użytkownik zaznaczy edytowalny widok tekstu, taki jak
EditText
z podłączoną klawiaturą sprzętową,
dane wejściowe są obsługiwane przez system. Jeśli jednak chcesz przechwycić
lub samodzielnie obsługiwać wprowadzanie tekstu z klawiatury, możesz to zrobić, implementując metody wywołania zwrotnego
z KeyEvent.Callback
interfejsu, np. onKeyDown()
i onKeyMultiple()
.
Zarówno Activity
,
a klasa View
implementuje komponent
KeyEvent.Callback
.
zwykle zastępują metody wywołania zwrotnego w rozszerzeniu tych klas, jak
odpowiednie.
Uwaga: w przypadku obsługi zdarzeń klawiatury za pomocą makra
klasa KeyEvent
i powiązane interfejsy API,
można oczekiwać, że zdarzenia dotyczące klawiatury pochodzą wyłącznie z klawiatury sprzętowej. Nigdy nie polegaj na kluczu odbierającym
zdarzeń dla dowolnego klawisza przy użyciu programowej metody wprowadzania (klawiatury ekranowej).
Obsługa pojedynczych kluczowych zdarzeń
Aby obsługiwać pojedyncze naciśnięcie klawisza, zaimplementuj
onKeyDown()
lub onKeyUp()
,
w razie potrzeby. Zwykle należy użyć funkcji
onKeyUp()
jeśli chcesz mieć pewność, że otrzymasz tylko jedno zdarzenie. Po naciśnięciu i przytrzymaniu klawisza
to funkcja onKeyDown()
jest wywoływana wiele razy.
Na przykład ta implementacja reaguje na niektóre klawisze klawiatury w celu sterowania grą:
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); } }
Uchwyt klawiszy modyfikujących
Aby reagować na kluczowe zdarzenia modyfikujące, np. gdy klucz został połączony z Shiftem
lub Control, możesz
zapytanie KeyEvent
która jest przekazywana do metody wywołania zwrotnego. Kilka metod
podać informacje o klawiszach modyfikujących, takie jak
getModifiers()
i getMetaState()
.
Najprostszym rozwiązaniem jest jednak sprawdzenie, czy
dokładny klawisz modyfikujący jest naciskany za pomocą takich metod jak
isShiftPressed()
i isCtrlPressed()
.
Oto przykładowa implementacja onKeyUp()
z dodatkową obsługą w przypadku naciśnięcia klawisza Shift za pomocą jednego z klawiszy:
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); } }
Dodatkowe materiały
- Asystent skrótów klawiszowych : ekran systemowy, który umożliwia użytkownikom wyszukiwanie skrótów klawiszowych dostępnych w aplikacji.