最近的项目里面要监听软键盘的Enter的按键信息,如下图,需要在上一行按Enter的时候自动切换到下一行,以此类推。
但是有时候会出现点击一次,响应两次的现象,也就是按一次Enter换两行,经过半天的实践,总结如下:
1.网上说有调用 OnEditorActionListener,而不是OnKeyListener 的方法,经过测试并不能解决问题,http://www.2cto.com/kf/201408/327967.html。估计是因为原文中是监听android:imeOptions="actionSearch"的事件,而我要监听的是Enter事件,可能有区别。
2.还有说法是必须区分对待KeyDown和KeyUp,确实是这样的,因为当我只监听KeyDown事件的时候,响应两次的情况大幅降低了,但是还是偶尔会出现,特别是如果小米手机的输入法中,输入英语,出现待选词的时候,按Enter会直接选中首选词并换行,而且有一定几率换两行。
3.最后的做法是只监听KeyUp事件,完美解决了响应两次的问题。
</pre><pre name="code" class="java">private final OnEditorActionListener onMyEditorActionListener = new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// TODO 自动生成的方法存根
if (v==mPswText &&event.getKeyCode() == KeyEvent.KEYCODE_ENTER && KeyEvent.ACTION_UP==event.getAction()) {
//TODO what you want to do
return true;
}
return false;
}
}