-
키 이벤트 처리하기Android 2022. 8. 8. 14:30
안드로이드에는 여러 가지 키가 존재한다. 이전 액티비티로 돌아가거나 현재 액티비티가 루트 액티비티일 경우 앱을 종료시키는 뒤로 가기 키, 볼륨 조절을 위한 볼륨 업다운 키등 여러 가지 키 이벤트를 발생시켜 단말기의 특정 작업을 처리하는 경우가 많습니다.
안드로이드 앱 개발 과정에서도 이러한 각각의 키에 대한 이벤트 처리를 onKeyUp() 함수와 onKeyDown() 함수를 재정의함으로써 이벤트 처리 작업이 가능한데, 함수명으로도 바로 알 수 있듯이 onKeyDown()은 키가 눌렀졌을 때 호출되며 onKeyUp() 함수는 그 반대의 함수이다.
두 함수는 KeyCode 값과 KeyEvent 두 개의 공통된 매개변수를 인자로 받는다.
1. 두 함수의 리턴값의 의미
onKeyUp() 함수와 onKeyDown() 함수의 리턴 타입은 boolean이다.(0또는1) true를 리턴하는 경우 기존 시스템이 가지는 해당 키 이벤트에 대한 처리를 무시하겠다는 의미이며 반대로 false의 경우 개발자가 재정의한 키 이벤트 처리를 실행하고 시스템이 기존에 가지고 있던 루틴을 타겠다는 것을 의미한다.
예를 들어서 만약 뒤로가기 버튼에 대한 키 이벤트를 처리할 경우 Toast 메시지만 띄우고 기존의 뒤로 가기 버튼의 동작인 이전 액티비티 이동 또는 앱 종료와 같은 기능을 무시하고 싶을 때는 true로 리턴해주면 된다.
2. 키 이벤트(Key Event) 구현
onKeyDown() 함수와 onKeyUp() 함수를 재정의한다. KeyCode 값이 KeyEvent.KEYCODE_BACK일 경우 로그 캣에 로그를 남기도록 하고 true를 리턴했다. 뒤로 가기 키를 제외한 나머지 키 이벤트에 대한 처리는 시스템에 맡기도록 하기 위해 false를 리턴하게 한다.
3. View 위젯에 대한 키 이벤트 리스너 등록하기
EditText 두 개를 배치하고 두 EditText에 Key Event에 대한 리스너를 다르게 등록하면 된다.
key 이벤트 처리를 위해서는 먼저 View.OnKeyListener 인터페이스의 onKey() 함수를 재정의한다.
Listener1 클래스는 EditText1에 등록되는 리스너로 뒤로가기키를 눌렀다 뗐을 때 Toast 메시지를 띄워주고 false 값을 리턴하여 해당 EditText에 포커스 된 상태에서 뒤로 가기를 누르면 Toast 메시지를 띄우고 시스템이 기존에 가지는 뒤로 가기 이벤트도 처리를 하겠다는 것을 의미한다.
반대로 Listener2는 onKey() 함수의 리턴값이 true. 이는 시스템이 가지는 뒤로 가기 이벤트 처리를 하지 않고 무시하겠다는 의미로 EditText에 포커스 된 상태에서 뒤로 가기 키를 누르면 Toast 메시지만 띄워지고 앱은 종료되지 않는다.
키이벤트 스위치 다이얼로그등 다양한 툴들을 배워보니 이제 자신감이 생기는 것 같다.
'Android' 카테고리의 다른 글
텍스트 입력 이벤트 처리 (0) 2022.08.10 플로팅 액션 버튼 (0) 2022.08.09 Switch 사용해보기 (0) 2022.08.06 다이얼로그 사용해보기 (0) 2022.08.04 툴바 만들기 (0) 2022.07.28