[EditText附加后替换字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[EditText附加后替换字符相关的知识,希望对你有一定的参考价值。
我正在尝试使数字看起来像这样
932-874838 / 9
我用EditText这样做是为了在某些空格后附加-
和/
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(text: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
onValueChange(s.toString())
}
})
}
private fun onValueChange(value: String) {
mNumberTxtView.text = value
if (value.length == 3) {
mNumberTxtView.append("-")
}
if (value.length == 10) {
mNumberTxtView.append("/")
}
}
当我像输入时
932
它会自动附加-
,并且有效,但是在附加-
后,如果我键入另一个数字,它将用该数字替换-
而不是继续,因此它首先变为932-
,但尝试输入其他数字时,
932 8
它的替换方式类似于删除附加的-
我认为问题出在onValueChange()
方法内部
答案
尝试此操作。
private fun onValueChange(value: String) {
if (value.length == 3) {
mNumberTxtView.text = "${value}_"
} else if (value.length == 10) {
mNumberTxtView.text = "${value}/"
}
}
让我知道是否可行。
((字符串中“值”周围的大括号可能不是必需的。我仍然习惯于Kotlin处理字符串连接的方式。)
已编辑,删除了可能引起循环的冗余部分。
另一答案
您不应更改beforeTextChanged
和afterTextChanged
中的文本,以防止TextWatcher
再次调用这些方法。在afterTextChanged
中进行更改。但是请注意不要陷入无限循环,因为所做的任何更改都将导致递归再次调用此方法。
因此将onValueChanged
的调用设置为afterTextChanged
方法
除去mNumberTxtView.text = value
另一答案
[onValueChange
应该像这样:
var test: StringBuilder = StringBuilder()
fun onValueChange(value: String) {
test.append(value.last())
if (test.length == 3) {
test.append("-")
}
if (test.length == 10) {
test.append("/")
}
textView.text = test
}
以上是关于[EditText附加后替换字符的主要内容,如果未能解决你的问题,请参考以下文章
片段附加到其主机后,每次都不会调用 FragmentOnAttachListener
带有神秘附加字符的 Javascript Date getTime() 代码片段