删除 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
}
})
我正在尝试格式化编辑文本,因此当用户键入前两个数字时,会自动添加一个 '
,然后在接下来的两个数字键入 .
之后,最后一个结果如下所示: 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
}
})