키보드 작업 처리

사용자가 편집 가능한 텍스트 뷰(예: 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);
    }
}

추가 리소스

  • 단축키 도우미 : 사용자가 앱에서 제공하는 단축키를 검색할 수 있는 시스템 화면입니다.