사용자가 편집 가능한 텍스트 뷰(예:
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) } }
자바
@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); } }
추가 리소스
- <ph type="x-smartling-placeholder"></ph> 단축키 도우미 : 사용자가 앱에서 제공하는 단축키를 검색할 수 있는 시스템 화면입니다.