当用户在softkeypad

时间:2016-02-19 15:15:34

标签: android android-edittext android-softkeyboard

我有一个EditText。我用它来输入不同国家的手机号码。一旦用户开始输入号码,我就会根据号码的国家/地区开始格式化。例如,印度数字i表示为 98765 43210,即第五个字后的空格。同样,对于其他国家/地区,我使用不同的格式模式。

但是在从键盘删除号码时我遇到了问题。当用户在softkeypad上单击退格键时,会删除一个字符。当我重写EditText的AfterTextChanged方法时,它会被调用。在这种方法中,我检查格式是否因为删除字符而受到干扰。我尝试重新格式化剩余的数字,并在edittext上再次设置重新格式化的文本。这很正常。

但是当用户长按退格键以便一次性删除整个电话号码时,则会出现如下问题:

键盘的退格键被按下(因此焦点在键盘上),一个字符被删除,AfterTextChanged被调用,在AfterTextChanged方法中,我重新格式化文本并使用editText.setText(String)在edittext上再次设置重新格式化的文本,As i设置文本,焦点转到edittext,键盘丢失焦点。所以键盘不再按下。 (删除一个字符后,我可以看到键盘退格键在UI上未按下。即使我没有从退格键抬起我的手指) 结果它只删除了一个字符并停止了。

我知道如果donot在AfterTextChanged中的editText上设置了重新格式化的文本,那么longpress将起作用并且正在工作。但我需要设置此文本以显示数字的动态格式。

但是,当用户长按softkeypad的退格键时,我还想一次性删除电话号码。 请帮助我如何实现这一目标。

1 个答案:

答案 0 :(得分:0)

使用setOnLongClickListener或者在按下退格键后将字符长度与之前的值进行比较并忽略AfterTextChanged事件?