如何确定在BlackBerry上按下了哪个键

时间:2010-04-22 20:55:31

标签: java blackberry input keyboard

我想要什么:例如,要知道用户何时按下了数字为“2”的按钮。我不在乎是否按下“Alt”或“Shift”。用户按下了一个按钮,我想评估此按钮是否印有“2”。

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

通过使用启用ALT按钮并使用Keypad.key()查找“2”字符的键代码,我已设法使其显示为迂回方式获得实际按钮:

// 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中定义的常量,但我找不到映射到设备上实际按钮的常量。

更有经验的黑莓开发者是否愿意伸出援助之手?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用keyChar查找字符,但是为了捕获而不管字符是否变了,你还需要使用Keypad.getAltedChar:

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

答案 1 :(得分: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);
}

使用Characters类可以访问一组众所周知的字符