2016-09-14 43 views
1

在準備我的Chromebook的Android應用程序和物理鍵盤使用時,我想區分EditText在接收「Enter」(keyEvent 66)和「Shift + Enter」之間keyEvent 66顯然)來自物理鍵盤。我嘗試了一些不同的解決方案,例如檢測在Android的物理鍵盤上的Shift + Enter

  • dispatchKeyEvent(KeyEvent事件)在​​活動中。但event.getModifiers()始終返回0,event.getMetaState()也如此。 keyEvent.isShiftPressed()總是返回false。
  • onKeyDown(int keyCode,KeyEvent keyEvent)在活動中具有相同的結果。 keyEvent.isShiftPressed()總是返回false。

我還沒有找到一種方法或者使用的onkeyup(),onKeyPreIme(),editText.setOnKeyListener(...),或用editText.addTextChangedListener(新TextWatcher(){...})。我沒有任何問題獲得Enter事件,但Shift + Enter以我試過的所有方式與Enter事件無法區分。所以我的問題是:是否有任何其他Android開發人員找到一種方法來正確捕獲物理鍵盤上的Shift + Enter?

回答

1

我有同樣的問題,我通過檢測「Shift」向下和「Shift」向上事件來修復它,並定義一個存儲狀態的布爾值。 這是我的代碼,希望對你有所幫助。

final boolean[] isPressed = {false}; 
    inputEditText.setOnKeyListener(new View.OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // If the event is a key-down event on the "enter" button 
      if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
        (keyCode == KeyEvent.KEYCODE_ENTER)) { 

       if (isPressed[0]) { 

        // Shift + Enter pressed 

        return false; 
       } else { 

        // Enter pressed     

        return true; 
       } 
      } 

      if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
        (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) { 
       isPressed[0] = true; 
       return false; 
      } 

      if ((event.getAction() == KeyEvent.ACTION_UP) && 
        (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) { 
       isPressed[0] = false; 
       return false; 
      } 


      return false; 
     } 
    }); 
+0

感謝您的回答,這個解決方案似乎是唯一真正的可能性,我還沒有找到更好的東西:/ –