TextWatcher

나고수·2022년 1월 3일
0

1일1공부

목록 보기
2/67
var pointNumStr = "";
    binding.edittext.addTextChangedListener(object : TextWatcher {

        override fun afterTextChanged(p0: Editable?) {}

        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            if(!TextUtils.isEmpty(p0.toString()) && p0.toString() != pointNumStr) { //text가 null이 아니고 이전 text랑 다르다면 
                pointNumStr = makeCommaNumber(Integer.parseInt( p0.toString().replace(",","") ))
                binding.edittext.setText(pointNumStr)
                binding.edittext.setSelection(pointNumStr.length)  //커서이동
            }
        }
    })
}
fun makeCommaNumber(input:Int): String{
    val formatter = DecimalFormat("#,###")
    return formatter.format(input)
}

editText에 숫자를 입력하면 바로 3자리 수 마다 콤마를 찍어주는 방법을 공부했다.
editText의 Editable 변화를 감지하는 textWatcher을 이용하면 의외로 쉽게 해결 할 수 있었다.
덧붙이자면, editText에 숫자만 입력하게끔 하고 싶다면 inputType을 number로 지정하면 된다.

참고블로그

profile
되고싶다

0개의 댓글