编辑带短划线的文本掩码



我想用EditText创建一个掩码,目标是在开头有四(4(个破折号,当用户键入时,每个破折号都将被用户输入所取代。我正在考虑使用splicereplace,但也很难正确处理退格来删除输入。最好的方法是什么?

它应该是这样的样品

现在,输入的数量不限于四(4(个字符,因为它最多有50个字符。因此,为了证明它应该是这样的:

例如。

  1. A--
  2. A B--
  3. A B C-
  4. A B C D
  5. 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
}
}
}

相关内容

  • 没有找到相关文章

最新更新