删除 doOnTextChanged 上的文本会删除我以编程方式设置的编辑文本的特殊格式

deleting a text on doOnTextChanged deletes the special format of the edit text that I am setting programmatically

我正在尝试格式化编辑文本,因此当用户键入前两个数字时,会自动添加一个 ',然后在接下来的两个数字键入 . 之后,最后一个结果如下所示: 12'34'567 格式设置正常,除了当用户删除字符时 '. 被消除并且文本视图更改为 123456。有没有一种方法可以更好地处理编辑文本的格式?这是我的格式化程序的代码:

private fun setCoordenatesFormat(editText: EditText){
    editText.doOnTextChanged { text, start, count, after ->
        
        if(editText.text.length==2){
            editText.setText("${text.toString()}'")
            editText.setSelection(3)
        }
        if(editText.text.length==5){
            editText.setText("${editText.text}.")
            editText.setSelection(6)
        }
    }
}

在此先感谢您的帮助

您插入的特殊字符消失了,因为在您的条件语句中您正在检查特定长度以格式化字符串。因此,例如,当您检查时:

if(editText.text.length==5){
            editText.setText("${editText.text}.")
            editText.setSelection(6)
        }

然后,当您从 EditText 中删除最后一个字符时,新字符串的长度应为 4,既不等于 5,也不等于 2。

这不是最好的方法,但您可以尝试检测用户何时删除文本视图,并根据文本的长度可以知道您在哪个段中,并避免删除所需的格式。您必须使用 TextWatcher 来完成此操作。

editText.addTextChangedListener(object: TextWatcher{
    override fun afterTextChanged(s: Editable?) {}
    
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        if(after<count){
                //got deleted
        }
    }
    
    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            //your code on textchanged
    }
})