我想用EditText创建一个掩码,目标是在开头有四(4(个破折号,当用户键入时,每个破折号都将被用户输入所取代。我正在考虑使用splice
和replace
,但也很难正确处理退格来删除输入。最好的方法是什么?
它应该是这样的样品
现在,输入的数量不限于四(4(个字符,因为它最多有50个字符。因此,为了证明它应该是这样的:
例如。
- A--
- A B--
- A B C-
- A B C D
- A B C D E等等
我自己已经通过这种方法进行了管理。如果您有或可以优化此解决方案,请随时回答。
var isProgrammatic = false
val origTextSize = 36f
val totalDashes = "- - - -".split(" ").size
voucher_input.doAfterTextChanged {
if (!it.isNullOrBlank()) {
//No dashes here
var placeHolder = it.filterNot { c -> "-".contains(c)}.toString()
Log.wtf("Plain", placeHolder)
if (placeHolder.isBlank()) {
voucher_input.text = null //Use hint
return@doAfterTextChanged
}
if (isProgrammatic) {
isProgrammatic = false
return@doAfterTextChanged
}
if (placeHolder.length < 4){
val cursor = placeHolder.length
val numDash = totalDashes - placeHolder.length
var dashes = ""
for (i in 1..numDash)
dashes += "-"
placeHolder += dashes
Log.wtf("Dashes", placeHolder)
isProgrammatic = true
voucher_input.setText(placeHolder) //Modified input
voucher_input.setSelection(cursor) //Place cursor near at the end of alphanumeric
return@doAfterTextChanged
}
else if (placeHolder.length == 4) {
isProgrammatic = true
voucher_input.setText(placeHolder) //Start normal input
voucher_input.setSelection(voucher_input.text!!.length) //Place cursor at the end
}
}
}