Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- UIPresentationController
- DataBinding
- pod install
- Side Menu
- scrolling tab
- url 관찰
- 개발자 면접
- ios
- Tuist
- convert base64
- GeometryReader
- ViewBuilder
- 상단 탭바
- base64 변환
- Swift Package Manager
- detect url
- swift
- Android
- SwiftUI
- notifychanged
- swift #swift keychain #keychain 사용법
- transformation.map
- UIViewControllerTransitioningDelegate
- DevelopmentRegion
- 기존 앱
- url 추적
- 스크롤 탭
- development language
- List
- oberve url
Archives
- Today
- Total
버그 잡이
[android] edittext 적용시 확인해야할 디테일. #editTextInputFilter 코틀린에 적용하기 본문
eidttext는 사용자의 입력을 받는 창이다.
단순 버튼과는 다르게 사용자의 다양한 패턴에 대한 대응을 해줘야한다.
1. 키패드의 버튼으로 최종 입력하는 경우
setOnEditorActionListener()를 활용하면 키패드를 통한 완료 처리에 대응할 수 있다.
*이것을 설정해주지 않으면 키패드의 완료 버튼으로 최종 결과를 입력할때 아무런 결과를 호출할 수 없다.
wordMeaningET.setOnEditorActionListener { v, actionId, event ->
if(actionId == EditorInfo.IME_ACTION_DONE){
wordAddClick(v)
true
}
else{
false
}
*imeOption이 적용이 안 되는 경우가 있다.
이때는 inputType="text" 을 설정해주면 된다.
그 이유는 editText가 single-line인 경우만 ime 설정이 가능하기 때문이다.
*키패드 때문에 레이아웃이 일그러지는 경우
키패드 설정시 레이아웃이 변경되는 경우가 있다.
이럴때는 manifest 또는 activity 속성에 다음과 같이 선언해주면 된다.
in Manifest
android:windowSoftInputMode="adjustNothing"
OR
in Kotlin Code
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING)
2. 공백상태로 클릭하는 경우
TextUtils.isEmpty() 을 사용하여 예외처리를 해주자.
if(TextUtils.isEmpty(englishWordET.text)){
Toast.makeText(this, R.string.toast_no_edt, Toast.LENGTH_LONG).show()
}
3. 영어를 입력해야하는데 한글을 입력하는 경우
in XML
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
위 방법은 간단하지만 결정적인 단점이 있다.
우리가 위에서 열심히 설정한 IME 설정이 동작하질 않는다...
위 문제를 해결하기 위해서는
inputFilter 를 사용하자.
private fun onlyAlphabetFilterToEnglishET() {
englishWordET.setFilters(arrayOf(
InputFilter { src, start, end, dst, dstart, dend ->
if (src == " ") { // for space
return@InputFilter src
}
if (src == "") { // for backspace
return@InputFilter src
}
if (src.matches(Regex("[a-zA-Z]+"))) {
return@InputFilter src
}
Toast.makeText(this, "영단어를 입력해주세요", Toast.LENGTH_LONG).show()
englishWordET.setText("")
return@InputFilter ""
}
))
}
반응형
'안드로이드' 카테고리의 다른 글
MVVM 패턴이란? #MVVM #MVP #Android (0) | 2020.06.09 |
---|---|
[안드로이드, Kotlin] 내가 만든 CustomView 모음 #ProgressBar #TimePicker #EditText (0) | 2020.05.07 |
android 알람 앱 시간 설정 #Calendar #LocalDateTime #joda-time (0) | 2020.04.30 |
android 알람 앱 "어떤 service를 사용해야할까?" # 음악 재생 (0) | 2020.04.30 |
[Kotlin] 안드로이드 recyclerView 클릭 리스너 달기 #onItemclickListener (2) | 2020.04.28 |
Comments