防止“输入键”触发 TextWatcher

Posted

技术标签:

【中文标题】防止“输入键”触发 TextWatcher【英文标题】:Prevent ' Enter key ' to trigger TextWatcher 【发布时间】:2012-09-23 01:36:36 【问题描述】:

我正在制作一个应用程序来充当远程键盘,用户将在其中单击编辑文本并在计算机中键入相应的字母。

我在 TextWatcher 的帮助下检测到各种字母和数字,并成功将它们发送到我的服务器。

当用户按下回车键时出现问题。这也会触发 TextWatcher 。由于我正在发送最新输入的更改,因此服务器端会出现错误。

我所做的解决方案是,设置一个 onkeylistener,它将检测回车键并执行操作并 CONSUME 它,但不幸的是,在这种情况下,第一个 textwatcher 也会被触发,然后是 onkeylistener。

这是我的 onkeylistener 的代码

 keyboard.setOnKeyListener(new OnKeyListener()                  
  public boolean onKey(View v, int keyCode, KeyEvent event)                    
    if(keyCode == KeyEvent.KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_UP)  
                   out.println("enter");
                 return true;
              
        return false;
            
    );

TextWatcher 代码:

  private TextWatcher watcher = new TextWatcher() 
public void onTextChanged(CharSequence s, int start, int before, int count)    
        if(count>0)
        out.println(":"+s.subSequence(start, start+count).toString());
        
    
            .
            .
            .

问题在于按下回车键会触发 TextWatcher 的 onTextChanged 以及 onkeylistener。而我只想在关键听众上开火。 我只想在字母、数字、某些符号等情况下触发 Textwatcher。

此外,如果您能提出检测和发送字符(软)的不同方法,那就太好了。

【问题讨论】:

我也试过把 if cond.在 TextWatcher 中检查最新更改是否具有非字母数字字符。如果是这样,那么它不会输出.println()。但这也行不通。它仍然检测到 enter 键并输入 if cond 并执行 out.println()。 好吧,我想我解决了。在 Textwatcher 中添加这个 if 语句: if(s.toString().substring(start).contains("\n")) 如果最后输入的键是 'enter' 那么它会进入 this is 然后你可以做任何你想做的事。 【参考方案1】:

好吧,我想我解决了。在 Textwatcher 中添加这个 if 语句:

if(s.toString().substring(start).contains("\n"))

这样,如果输入的最后一个键是“输入”,那么它会进入这个状态,然后你可以执行任何你想要的操作。

【讨论】:

以上是关于防止“输入键”触发 TextWatcher的主要内容,如果未能解决你的问题,请参考以下文章

防止表单提交字段输入键keydown? [复制]

防止在 EditText 上输入键,但仍将文本显示为多行

JQuery:Keyup,如何防止箭头(向上和向下)的默认行为并输入键?

html 在js中输入键时触发的功能。

html 在js中输入键时触发的功能。

如何仅在输入模糊时触发反应表单 valueChanges 订阅并在 Angular 2 中输入键