【问题标题】:Detect backspace in TextWatcher [duplicate]在TextWatcher中检测退格[重复]
【发布时间】:2012-08-25 11:40:48
【问题描述】:

我正在使用TextWatcher,但无法检测到TextWatcher.afterTextChange 事件中的Backspace 键。我还想在textWatcher 事件中的某些情况下清除textView

public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    // I want to detect backspace key here
}

【问题讨论】:

  • TextWatcher 的代码好吗?
  • public void afterTextChanged(Editable s) { // TODO 自动生成的方法存根 // 我想在这里检测退格键 }

标签: android textwatcher


【解决方案1】:

要检测TextWatcher 中的退格,您可以检查传递给onTextChange 函数的变量计数(如果输入退格,则计数将为0),如下所示:

@Override
public void onTextChanged(CharSequence cs, int start, int before, int count) {

  if (react) {
    if (count == 0) {
      //a backspace was entered
    }

    //clear edittext
    if(/*condition*/) {
      react = false;
      setText("");
      react = true;
    }
  }
}

boolean 函数需要反应 setText() 否则它会变得递归。希望这会有所帮助!

【讨论】:

  • 当 s.length() = 0 时没有文本更改时它不会回拨,无论按下什么键都不会回拨..
  • 当按下返回按钮并且EditText 中没有字符时,onTextChanged 中没有收到回调。不知道为什么这个答案甚至会出现在这里!
  • 如果输入的是空格,那么也计数 == 0
【解决方案2】:

KeyListener 可以满足你的两个条件。

mEditText.setOnKeyListener(new OnKeyListener() {                 
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
           if(keyCode == KeyEvent.KEYCODE_DEL){  
             //on backspace
             }
    return false        
        }
});

类似地,在onKey() 中,您可以放置​​多个检查语句来检查条件,当您想清除textView 时。

编辑:@RankoR 非常友好地指出,请记住 onKeyListener() 仅适用于硬件键盘而不是软键盘。

【讨论】:

  • OnKeyListener 仅适用于硬件键盘。
  • @RankoR :是的,我知道 onKeyListener 不适用于软键盘。但是,如果您再次检查该问题,您会发现该问题并非特定于软键盘。但是,是的..再一次,你提出了一个非常有效的观点。将编辑我的答案以包含您的观点。
  • @RankoR :编辑了答案。也许您现在可以重新考虑您的 downvote。 :D
  • 谢谢,删除 -1 并添加 +1 ;)
  • 现在,你真是太体贴了!万分感谢! :D
猜你喜欢
  • 2012-03-16
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 2012-11-18
  • 1970-01-01
相关资源
最近更新 更多