Android:onKeyListener模拟按下的键的两个实例

时间:2011-02-19 03:12:34

标签: android

  

可能重复:
  public boolean onKey() called twice?

Display.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        switch (keyCode) {
             case KeyEvent.KEYCODE_ENTER:
                solveExpression();
                return true;
        }
        return false;
    }
});

我正在尝试通过按下键盘上的enter按钮解决Display(EditText)中包含的表达式,但它总是将其解释为我按下按钮两次。有谁知道为什么会这样?

3 个答案:

答案 0 :(得分:4)

...试

Display.setOnKeyListener(new OnKeyListener() {    
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_ENTER:

                // Check for ACTION_DOWN only...
                if (KeyEvent.ACTION_DOWN == event.getAction()) {
                    solveExpression();
                    return true;
                }
        }
    }
});

“操作”可以是ACTION_DOWNACTION_UPACTION_MULTIPLE(最后一个用于按住键时)。将为任何/所有这些行动调用onKey()。

正如另一个回答所提到的那样,它会触发两次,因为它曾经一次性下降而一次性上升。

答案 1 :(得分:2)

if (event.getAction()!=KeyEvent.ACTION_DOWN) // we catch only key down events
    return true;

因此,您停止将其他关键事件视为onClick。

如果你想让其他人无法进一步获取其他工作的事件,你应该设置

    return false; 

答案 2 :(得分:0)

不是一个机器人,但它注册两次的事实让我觉得OnKey包含onKeyDown和onKeyUp。听onKeyUp也会为你工作吗?