2011-10-25 23 views
1

嗨,大家好,我一直與Android的同時按下,它的罰款,直至現在。2個或多個鍵最近

當我要處理的一個關鍵按下事件我只是重寫我的活動中,onKeyDown方法。與關鍵事件相同。

的問題是,這只是工作的一個關鍵,如果我按到鍵在同一時間只有一個就是處理。

例如:

​​

如果我按 'A' 和 'C',同時一個被首先處理。

我的第一個想法是使用onKeyDown事件設置標誌以保持按下哪些按鍵的軌跡並用onKeyUp事件清除標誌,但是當我在活動之間切換時失敗。

現在,我想要的是類似以下內容:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 
    boolean returnValue = super.onKeyDown(keyCode, event); 
    switch(keyCode){ 
     case KeyEvent.KEYCODE_A: 
      if(/* C is pressed */){ 
       //Do something not so awesome here 
      } 
      else{ 
       //Do something awesome here 
      } 
     return true; 

     case KeyEvent.KEYCODE_C: 
      if(/* A is pressed */){ 
       //Do something not so awesome here 
      } 
      else{ 
       //Do something even more awesome here 
      } 
     return true; 
    } 
    return returnValue; 
} 

回答

2

的問題是,這只是工作的一個關鍵,如果我按到鍵在同一時間只有一個就是處理。

這是因爲Android不支持多個同時按鍵,除了標準的「元」鍵(例如shift)。

+0

這非常令人失望,謝謝你的回答。 – razpeitia

+0

我已經編寫了一個測試應用程序,對一堆鍵進行了調整,並且收到了所有適當的鍵向下/向上事件,即使是跨活動。所以,我不確定你的意思是「Android不支持多個同時按鍵」。 –

+1

@Jason LeBrun:我的意思是多個同時按鍵不會被報告爲一個單獨的「KeyEvent」,這似乎是OP所尋求的。 – CommonsWare

1

多重操作的檢測往往是由硬件的限制規定。許多鍵盤都是使用矩陣方式設計的,因此並不總是可以按下唯一檢測到的按鍵。

如果你將檢測多個按鍵的設備上,你可以嘗試存儲在靜態區域的標誌的keydown,或在一個對象,你可以活動之間傳遞。

但請記住,最終,你的解決方案的有效性將通過硬件鍵盤實施限制。