捕获Soft/OnScreen键盘的特殊按键(shift,alt)

问题描述:

我正在尝试捕捉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; 
     } 
    }); 

} 

每当按下某个键以确保事件正在注册时,请尝试记录键码。如果是,只需将该代码添加到您的switch语句中即可。

例如,onKeyListener开头的System.out.println(keyCode)。您可以使用LogCat查看输出。

+0

我试着在“if(event.getAction()== KeyEvent.ACTION_DOWN)”这一行上放置一个断点,并且如果我按下物理键盘的移位,它会一直停止,但从来没有按下Shift onScreenKeyboard。所以,问题在于onScreenKeyboard的所有按键都没有执行onKey。 – 2012-03-21 07:54:07