2010-04-22 23 views
2

我想要什么:例如,要知道用户何时按下了具有数字“2”的按钮。我不在乎是否按下“Alt”或“Shift”键。用户已经按下了一个按钮,并且我想评估这个按钮上是否打印有'2'。如何找出在BlackBerry上按下哪个按键

当然,如果我切换设备,这个键会改变。在Bold 9700/9500上,这是'E'键。在Pearl上,这是'T'/'Y'键。

我已经成功地获得这似乎是一种迂回的方式,通过查找“2”字的键码与启用ALT键,使用Keypad.key()获得实际的按钮,这方面的工作:

// figure out which key the '2' is on: 
final int BUTTON_2_KEY = Keypad.key(KeypadUtil.getKeyCode('2', KeypadListener.STATUS_ALT, KeypadUtil.MODE_EN_LOCALE)); 

protected boolean keyDown(int keycode, int time) { 
    int key = Keypad.key(keycode); 
    if (key == BUTTON_2_KEY) { 
     // do something 
     return true; 
    } 
    return super.keyDown(keycode,time); 
} 

我不禁想知道是否有更好的方法来做到这一点。我查看了在KeypadListenerKeypad中定义的常量,但找不到映射到设备上实际按钮的任何常量。

有更多有经验的黑莓开发者会帮忙吗?

谢谢!

+0

'1 g。 – Cephron 2011-07-11 17:57:58

回答

3

使用keyChar找到字符,但为了捕获,不管字符是否被删除,您还需要使用Keypad.getAltedChar:

 
public boolean keyChar(char key, int status, int time) 
{ 
    if (key == '2' || Keypad.getAltedChar(key) == '2') { 
    // Do your stuff here. 
    } 
}
+0

谢谢!这几乎是我所期待的。 :-D – Skrud 2010-04-26 14:15:44

0

不是的keyDown(),覆盖keyChar()代替,就像这样:

public boolean keyChar(char key, int status, int time) 
{ 
    switch (key) 
    { 
     case Characters.DIGIT_TWO: 

      //do something 
      return true; 
    } 
    return super.keyChar(key, status, time); 
} 

人物类,您可以访问一个众所周知的字符集

+0

这会告诉我是否输入了字符'2'(如果用户先按下了“ALT”)。我想知道的是,如果_button_上的'2'被按下。如果ALT未启用,'keyChar'会告诉我'e'或't'(取决于BlackBerry类型)。 – Skrud 2010-04-23 14:10:03

相关问题