안드로이드
안드로이드 코틀린 에디트 텍스트(EditText) 문자열 대문자 변경, 특정 위치에서 기호 추가 하기
캬옹냐옹
2021. 3. 2. 10:15
728x90
이런식으로 첫번째 문자는 대문자로
4번째 입력시 '-' 자동 추가 되게 만들고 싶었다.
비슷한 키워드로 검색하면 휴대폰 번호 포맷 적용 방식만 나와 있어서 삽질을 많이 했다...
view.userSettingSerialText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) { //텍스트 변경 후
//p0: 추가된 문자열
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { //텍스트 변경 전
//p0: 현재 에디트텍스트에 입력된 문자열, p1: 새로 추가될 문자열 위치, p2: 변경될 문자열의 수, p3: 새로 추가될 문자열 수
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { //텍스트 변경 시
//p0: 현재 에디트텍스트에 입력된 문자열, p1: 새로 추가될 문자열 위치, p2: 삭제된 기존 문장열의 수, p3: 새로 추가될 문자열 수
view.userSettingSerialText.removeTextChangedListener(this) //리스너 사용 해재
var tempString: String = view.userSettingSerialText.text.toString()
tempString = tempString.toUpperCase(Locale.getDefault()) //대문자로 변경
view.userSettingSerialText.setText(tempString)//대문자 변경 문자 대입
view.userSettingSerialText.setSelection(tempString.length)//커서 위치 끝으로
Log.d(LOG2, "onTextChanged p0: ${p0}, p1: ${p1}, p2: ${p2}, p3: ${p3}")
if ((view.userSettingSerialText.text.length == 5) && (p1 != 5)){ //5번째 문자 추가시 '-' 추가, 삭제시 '-' 추가 동작 안함, 5번째는 삭제시에만 나옴
tempString = tempString + "-"
view.userSettingSerialText.setText(tempString)
view.userSettingSerialText.setSelection(tempString.length)
}
Log.d(LOG2, "onTextChanged p0: ${p0}, p1: ${p1}, p2: ${p2}, p3: ${p3}")
view.userSettingSerialText.addTextChangedListener(this) //리스터 다시 사용
}
})
view.userSettingSerialText.removeTextChangedListener(this) //리스너 사용 해재
view.userSettingSerialText.addTextChangedListener(this) //리스터 다시 사용
이걸 안해주면 리스너가 계속 호출 되며 APP이 이상 해지는 모습을 볼 수 있다.
view.userSettingSerialText.setOnKeyListener { v, keyCode, event ->
Log.d(LOG2, "keyCode: ${keyCode}")
true
}
그리고 위의 리스터는 꼭 추가 하지 말고 해야 한다.
키보드의 문자 지우는 동작을 하지 않는다.
아마도 저기서 따로 처리 해주면 될거 같긴 한데 필요성을 느끼지 못했다.
후...이거때문에 삽질을 하루나 했다...ㅂㄷㅂㄷ....
참고 자료: eso0609.tistory.com/42
728x90