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

Posted

技术标签:

【中文标题】删除 doOnTextChanged 上的文本会删除我以编程方式设置的编辑文本的特殊格式【英文标题】:deleting a text on doOnTextChanged deletes the special format of the edit text that I am setting programmatically 【发布时间】:2020-07-22 16:21:12 【问题描述】:

我正在尝试格式化编辑文本,因此当用户键入前两个数字时,会自动添加一个 ',然后在接下来的两个数字键入 . 之后,最终结果如下所示:@ 987654323@ 格式化工作正常,除了当用户删除一个字符时'. 被消除并且文本视图更改为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)
        
    

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

这不是最好的方法,但您可以尝试检测用户何时删除 textview 以及文本的长度,您可以知道您在哪个段中,并避免删除您想要的格式。您必须使用 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
    
)

【讨论】:

非常感谢!我知道这不是最好的方法,但我会尝试使用它并回复您。【参考方案2】:

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

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

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

【讨论】:

是的,我注意到了这一点。你知道我可以使用更好的方法来避免这种情况发生吗?

以上是关于删除 doOnTextChanged 上的文本会删除我以编程方式设置的编辑文本的特殊格式的主要内容,如果未能解决你的问题,请参考以下文章

矩形上的文本会杀死矩形的悬停效果

使用 jQuery 替换表单提交上的文本会停留几秒钟,然后消失

当用户滚动 uitableview 时,UITableViewCell 中的文本会被删除

Django:为啥我放置在 Django Summernote 中的文本会在我的 HTML 模板中显示 HTML 标记?

为啥链接的文本会溢出 div 框?

更改 TextFormatter 中的文本会导致递归调用