2012-03-20 182 views
1

我正在嘗試捕捉shift或alt鍵的按鍵,並且它似乎可以在物理鍵盤上正常工作。不幸的是,當我使用屏幕鍵盤測試相同的代碼時,它根本沒有響應(我試過一個2.1,4.03仿真器和2.3物理設備)。捕獲Soft/OnScreen鍵盤的特殊按鍵(shift,alt)

這似乎是一個平臺問題,可能沒有解決方法,但作爲最後一個努力,我想在這裏發佈問題,看看有沒有人找到了我想要的任何想法。

謝謝!

編輯澄清我的觀點:我試圖把一個斷點在「如果(event.getAction()== KeyEvent.ACTION_DOWN)」行,它就會停止,如果我按物理鍵盤的移位,但從來沒有當我按onScreenKeyboard的轉變。所以,問題在於onScreenKeyboard的所有按鍵都沒有執行onKey。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mEditText1 = (EditText) findViewById(R.id.editText1); 

    mEditText1.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (event.getAction() == KeyEvent.ACTION_DOWN) 
      { 
       switch (keyCode) 
       { 
        case KeyEvent.KEYCODE_DPAD_CENTER: 
        case KeyEvent.KEYCODE_ENTER: 
         Toast.makeText(IMETestActivity.this, "Enter was consumed", 
           Toast.LENGTH_SHORT).show(); 
         return true; 

        case KeyEvent.META_SHIFT_LEFT_ON: 
        case KeyEvent.META_SHIFT_RIGHT_ON: 
         Toast.makeText(IMETestActivity.this, "Meta Shift was consumed", 
           Toast.LENGTH_SHORT).show(); 
         return true; 

        case KeyEvent.KEYCODE_SHIFT_LEFT: 
        case KeyEvent.KEYCODE_SHIFT_RIGHT: 
         Toast.makeText(IMETestActivity.this, "Shift was consumed", 
           Toast.LENGTH_SHORT).show(); 
         return true; 

        default: 
         break; 
       } 
      } 

      return false; 
     } 
    }); 

} 

回答

0

每當按下某個鍵以確保事件正在註冊時,請嘗試記錄鍵碼。如果是,只需將該代碼添加到您的switch語句中即可。

例如,onKeyListener開頭的System.out.println(keyCode)。您可以使用LogCat查看輸出。

+0

我試着在「if(event.getAction()== KeyEvent.ACTION_DOWN)」這一行上放置一個斷點,並且如果我按下物理鍵盤的移位,它會一直停止,但從來沒有按下Shift onScreenKeyboard。所以,問題在於onScreenKeyboard的所有按鍵都沒有執行onKey。 – 2012-03-21 07:54:07