[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处理字符串连接的方式。)

已编辑,删除了可能引起循环的冗余部分。

另一答案

您不应更改beforeTextChangedafterTextChanged中的文本,以防止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附加后替换字符的主要内容,如果未能解决你的问题,请参考以下文章

在片段替换上显示/隐藏 Android 软键盘

EditText 软键盘总是在视图寻呼机的片段上打开

片段附加到其主机后,每次都不会调用 FragmentOnAttachListener

带有神秘附加字符的 Javascript Date getTime() 代码片段

EditText setSelection 不适用于大于 8 的位置

片段问题中的 NullPointerException