防止“输入键”触发 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的主要内容,如果未能解决你的问题,请参考以下文章