개발 창고/Android

[Kotlin] EditText에서 이벤트를 처리하는 방법

로이제로 2023. 7. 28. 22:00
반응형

How to handle events in EditText

Kotlin을 이용해 입력창을 만드는 경우 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를 처리할 때는 조금 더 세밀한 관심이 필요하게 됩니다.)

시스템 키보드에서 보이는 엔터 (액션)

 

※ 이 글은 워드프레스에 작성한 글과 동일한 작성자의 동일한 글입니다.

https://royfactory.net/2023/07/06/kotlin-to-handle-event-in-edittext/

 

[Kotlin] How to handle events in EditText - ROY FACTORY

How to handle events in EditText on Kotlin on Android? In this article, you will learn how to handle it and how to convert the keyboard's enter key.

royfactory.net

 

반응형