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로 지정하면 된다.