-
-
Save hleinone/5b445e5475ca9f8a3bdc6a44998f4edd to your computer and use it in GitHub Desktop.
class CreditCardNumberFormattingTextWatcher : TextWatcher { | |
private var current = "" | |
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { | |
} | |
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) { | |
} | |
override fun afterTextChanged(s: Editable) { | |
if (s.toString() != current) { | |
val userInput = s.toString().replace(nonDigits,"") | |
if (userInput.length <= 16) { | |
current = userInput.chunked(4).joinToString(" ") | |
s.filters = arrayOfNulls<InputFilter>(0) | |
} | |
s.replace(0, s.length, current, 0, current.length) | |
} | |
} | |
companion object { | |
private val nonDigits = Regex("[^\\d]") | |
} | |
} |
Thanks
You can refactor this part of the code
val userInput = s.toString().replace("[^\\d]".toRegex(), "")
if (userInput.length <= 16) {
val sb = StringBuilder()
for (i in 0..userInput.length - 1) {
if (i % 4 == 0 && i > 0) {
sb.append(" ")
}
sb.append(userInput[i])
}
current = sb.toString()
using something like
current = userInput.replace(" ","").chunk(2).jointString(" ")
And a question
Why is needed this line? If I remove it, the format doesn't work
s.filters = arrayOfNulls(0)
@Mun0n Thanks for the suggestion, that simplified it quite a bit. I honestly don't remember why the filters need to be set, nor why emptyArray
wouldn't be sufficient. 🤷♂️
@Mun0n Thanks for the suggestion, that simplified it quite a bit. I honestly don't remember why the filters need to be set, nor why
emptyArray
wouldn't be sufficient. 🤷♂️
this line is needed if you set inputType as a number for edit text in xml file. cause number input type is not accept space.
how this code does't go into infinite loop? i think the answer is in s.filters = arrayOfNulls<InputFilter>(0)
but i cannot figure out
how this code does't go into infinite loop? i think the answer is in
s.filters = arrayOfNulls<InputFilter>(0)
but i cannot figure out
if (s.toString() != current)
will prevent that.
Work like charm, Thanks man!
You saved my day, Thanks man!
@mohsenmdb Cheers, my pleasure!
Worked like charm. Thanks