03月26, 2015

Android 监听按键信息的时候会出现两次响应的解决办法

最近的项目里面要监听软键盘的Enter的按键信息,如下图,需要在上一行按Enter的时候自动切换到下一行,以此类推。

但是有时候会出现点击一次,响应两次的现象,也就是按一次Enter换两行,经过半天的实践,总结如下:

alt

  1. 网上说有调用 OnEditorActionListener,而不是OnKeyListener 的方法,经过测试并不能解决问题,http://www.2cto.com/kf/201408/327967.html。估计是因为原文中是监听android:imeOptions="actionSearch"的事件,而我要监听的是Enter事件,可能有区别。

  2. 还有说法是必须区分对待KeyDown和KeyUp,确实是这样的,因为当我只监听KeyDown事件的时候,响应两次的情况大幅降低了,但是还是偶尔会出现,特别是如果小米手机的输入法中,输入英语,出现待选词的时候,按Enter会直接选中首选词并换行,而且有一定几率换两行。

  3. 最后的做法是只监听KeyUp事件,完美解决了响应两次的问题。

    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; } }

本文链接:http://www.siki.space/post/use_onkeyup_to_avoid_double_click.html

-- EOF --

Comments