반응형
안드로이드 EditText를 사용하면 크게 사용하는 것 중 하나가
- 특수문자 제어
- 엔터키 처리
라고 할 수 있다.
특수문자 제어
특수문자의 경우 정규식을 통해서 처리 할 수 있다.
/**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 를 이용하여 엔터키를 눌렀을 때 이벤트를 받을 수 있고,
이 값이 어떤 값이냐에 따라 지정된 동작을 수행할 수 있다.
반응형
'Develop > Android' 카테고리의 다른 글
Android AD_ID permission targetSDKVersion 33 (0) | 2023.04.05 |
---|---|
RecyclerView No layout manager attached; skipping layout (0) | 2023.01.02 |
Fragment Commit, CommitAllowingStateLoss 그리고 재현방법 (0) | 2022.11.23 |
Livedata setValue와 postValue 그리고 Cannot invoke setValue on a background thread (1) | 2022.11.10 |
Compose Camp! (0) | 2022.11.08 |