하루에 0.01%라도 성장하자

Develop/Android

Android EditText 특수문자 제어, NextFocus, 엔터키 처리

뚠님 2022. 12. 26. 14:01
반응형

안드로이드 EditText를 사용하면 크게 사용하는 것 중 하나가 

 

  1. 특수문자 제어
  2. 엔터키 처리 

라고 할 수 있다.

 

특수문자 제어

특수문자의 경우 정규식을 통해서 처리 할 수 있다.

 

/**1. 정규식 패턴 ^[a-z] : 영어 소문자 허용
        2. 정규식 패턴 ^[A-Z] : 영어 대문자 허용
        3. 정규식 패턴 ^[ㄱ-ㅣ가-힣] : 한글 허용
        4. 정규식 패턴 ^[0-9] : 숫자 허용
        5. 정규식 패턴 ^[ ] or ^[\\s] : 공백 허용
        **/

private val editTextFilter = InputFilter { source, start, end, dest, dstart, dend ->
        val ps = Pattern.compile("[ㄱ-ㅎㅏ-ㅣ가-힣a-z-A-Z0-9()&_\\s-]+$")
        if (!ps.matcher(source).matches()) {
            ""
        } else source
    }

 

위처럼 선언해 놓고.

 

binding.editText1.filters = arrayOf(editTextFilter)

 

바인딩 되어 있는 editText를 선택하여 filters 값을 주면 된다!

 

여기서 팁은 정규식 마지막 +$ 값인데, 이 값을 처리해 주지 않으면, 한글 뒤에 숫자가 올때 한글자가 씹히는 현상이 발생한다.

 

엔터키 처리

EditText에 엔터키가 들어가면 안되는 경우가 있다.

 

이때는 아래와 같이 설정해주면 된다.

 

<EditText
                        android:id="@+id/testEdit"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="25dp"
                        android:maxLines="1"
                        android:imeOptions="actionNext"
                        android:inputType="text"
                        android:nextFocusDown="@id/testEdit2"
                        android:hint="@string/hint" />

 

봐야하는 것은

 

  • maxLines : 이 값을 1로 선언해주어야 엔터(줄바꿈) 처리가 되지 않는다.
  • inputType : inputType을 선언해주지 않으면 maxLines가 의미가 없다. 따라서 두개는 세트로 운영된다.
  • imeOptions : 이 값을 이용하여 키보드의 엔터키 아이콘을 변경 할 수 있다.
  • nextFocusDown : 이값에 키보드에서 엔터키를 눌렀을 때 어디로 포커스를 이동할 지 지정할 수 있다.

 

버튼에 완료처리를 하려면 아래와 같은 코드를 작성한다.

 

binding.editText.setOnEditorActionListener { v, actionId, event ->
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                // ... do something()
                
                return@setOnEditorActionListener true
            }
            return@setOnEditorActionListener false
        }

 

setOnEditorActionListener 를 이용하여 엔터키를 눌렀을 때 이벤트를 받을 수 있고,

이 값이 어떤 값이냐에 따라 지정된 동작을 수행할 수 있다.

 

반응형