onKeyUp()和onKeyDown()有一些问题

时间:2014-07-07 04:54:56

标签: android keyboard-events

我试图在外接键盘的帮助下在Android应用程序中调用ctrl + c或ctrl + d中的某些事件。为此我们所做的如下所示

         @Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
 if( keyCode == KeyEvent.KEYCODE_CTRL_LEFT){
          flag_sellreceipt=KeyEvent.isModifierKey(KeyEvent.KEYCODE_CTRL_LEFT);
        }
    if (keyCode == KeyEvent.KEYCODE_D && flag_sellreceipt) {
        HotkeyForDone();
        flag_sellreceipt = false;
    } 
    if (keyCode == KeyEvent.KEYCODE_C && flag_sellreceipt) {
        try {
            cancelCart();
            flag_sellreceipt = false;
        } catch (Exception e) {
            handleException(Present.this, e,"In some screen" + e.toString(),null);
            e.printStackTrace();
            flag_sellreceipt = false;
        }
    }  
   }

这正如我所希望的那样正常,但有些事情发生是不可取的。 Ctrl + d或Ctrl + c一起工作正常,但是发生了什么假设用户只按ctrl一段时间后用户按d或c然后按Ctrl + d或Ctrl + c调用这是非常不受欢迎的事件。它应该只在ctrl和alphabet同时按下时发生。任何机构都可以帮我解决这个问题,或者请建议我让我解决这个问题。提前感谢所有

2 个答案:

答案 0 :(得分:0)

为什么要这样编程呢?尝试使用PC上的键盘 - 如果你按住控制2分钟,然后点击c,它仍然是一个ctrl + c,因为你仍然有控制权。

如果您确实想要出于某种奇怪的原因这样做,请保持按下控制键的时间。在onKeyUp中,如果按下控制键的时间超过X毫秒(其中x是一些合理的值,如200左右),请清除你用来将控件标记为关闭的fllag。

答案 1 :(得分:0)

解决问题

      @Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
     if( keyCode == KeyEvent.KEYCODE_CTRL_LEFT){
         flag_sellreceipt = false;
     }
     }

并且

        @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

     if( keyCode == KeyEvent.KEYCODE_CTRL_LEFT){
          flag_sellreceipt=KeyEvent.isModifierKey(KeyEvent.KEYCODE_CTRL_LEFT);
         int i = KeyEvent.META_CTRL_LEFT_ON;
         System.out.println("ctrl is pressed");
        }
    return super.onKeyDown(keyCode, event);     
}