How to handle events in EditText
입력 창을 만드는 경우 EditText를 사용하게 됩니다.
<EditText
android:id="@+id/etText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
이때 단순히 안드로이드 가상 키보드의 Enter가 입력되는 경우 어떠한 처리를 하려고 하면 어떻게 해야 할까요?
사용 예
우리는 주로 이런 경우 Enter키를 이용하여 다음 작업들을 하곤 합니다.
ex #1. 카카오톡과 같은 채팅 앱에서 특정 버튼 외에 바로 입력을 원하는 경우
ex #2. 로그인 아이디/비밀번호 입력하고 버튼 외에 바로 로그인하는 경우
ex #3. 검색 조건에 입력하고 버튼 외에 엔터로 바로 검색하는 경우
선언 방법
findViewById<EditText>(R.id.etText).setOnEditorActionListener { textView, action, keyEvent ->
// Step. ENTER키 입력된 경우
if(action == EditorInfo.IME_ACTION_DONE){
// TODO
}
false
}
setOnEditorActionListener를 이용하면, action에 EditorInfo의 IME_ACTION_DONE로 들어옴을 확인할 수 있고, 이를 캐치하여 처리해 주면 됩니다.
이 때 주의할 점이 EditText의 inputType을 text로 해주는 게 좋습니다.
이유는, 별도의 inputType이 지정되지 않으면, EditText는 2줄 이상 입력을 허용하기 때문에, ENTER가 행을 포함하게 됩니다. 그런 경우, 위 에서의 예제에서 예상하지 못했던 메시지 입력 시 에나 로그인 아이디/비밀번호, 검색 조건에 개행 문자(엔터)가 포함되어 원치 않는 결과가 발생할 수 있습니다.
시스템 키보드에서 보이는 엔터 처리
일반적으로 처음 적어둔 데로 EditText를 이용하면 아래와 같이 ENTER버튼이 개행 아이콘으로 보여지게 됩니다.
<EditText
android:id="@+id/etText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
/>
하지만 위에 처럼 andorid:inputType을 text로 지정해주면, 아래와 같이 Enter버튼이 Action 버튼으로 바뀌고 추가 줄 없이 입력만 실행하고, 키보드가 닫히게 됩니다. (물론 2줄 이상을 이용할 때는 처음처럼 이용하는 게 낫겠지만, Enter의 Event를 처리할 때는 조금 더 세밀한 관심이 필요하게 됩니다.)
'개발 창고 > Android' 카테고리의 다른 글
[Kotlin] How to use Kakao Navigation in my app (1) | 2023.12.14 |
---|---|
[Kotlin] How to do Type Casting (1) | 2023.12.13 |
[Kotlin] How to Applying Bold and Italic to TextView (2) | 2023.12.12 |
[Kotlin] How to Use the Confirm window (1) | 2023.12.11 |
[Kotlin] How To enter a null value for "ContentValues" (putNull) (0) | 2023.12.10 |