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

+ Recent posts