개발 창고/Android

[Kotlin] How to Handle Events in EditText

로이제로 2023. 12. 13. 22:00
반응형

 

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를 처리할 때는 조금 더 세밀한 관심이 필요하게 됩니다.)

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

반응형