Format credit card in edit text in android

后端 未结 29 2048
耶瑟儿~
耶瑟儿~ 2020-11-30 19:18

How to make EditText accept input in format:

4digit 4digit 4digit 4digit 

I tried Custom format edit text input android to acc

29条回答
  •  星月不相逢
    2020-11-30 19:59

    If you are using Kotlin, this can be helpful:

    class CreditCardTextFormatter(
        private var separator: String = " - ",
        private var divider: Int = 5
    ) : TextWatcher {
    
        override fun afterTextChanged(s: Editable?) {
            if (s == null) {
                return
            }
            val oldString = s.toString()
            val newString = getNewString(oldString)
            if (newString != oldString) {
                s.replace(0, oldString.length, getNewString(oldString))
            }
        }
    
        private fun getNewString(value: String): String {
    
            var newString = value.replace(separator, "")
    
            var divider = this.divider
            while (newString.length >= divider) {
                newString = newString.substring(0, divider - 1) + this.separator + newString.substring(divider - 1)
                divider += this.divider + separator.length - 1
            }
            return newString
        }
    
        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }
    
        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }
    }
    

    The XML:

    
    

    And how to use it:

    etCardNumber.addTextChangedListener(CreditCardTextFormatter())
    

提交回复
热议问题