8

我想在按下 Android 键盘时获取 KeyCode 事件的 char 值。

public void KeyCodeEventAsChar(int keyCode, KeyEvent event) {

  char pressedKey;

  // TODO: convert key Code Event into char

  syslog.d ("TEST", "The pressed key in Android keyboard was char: " + pressedKey);

}

有谁知道如何做到这一点?!

更新:

我不想要硬编码的文本!我想把它转换成通讯录字符!

更新 2:

我还需要死字符,例如:à、á、ò、ó 等...

找到答案:

// TODO: convert key Code Event into char
char pressedKey = (char) event.getUnicodeChar();

重要提示: char 只有 1 个字节长度,因此它支持多个字符

4

5 回答 5

12

> 我已经回答了更新问题

// TODO: convert key Code Event into char
char pressedKey = (char) event.getUnicodeChar();

重要提示:char 只有 1 个字节长度,因此它不支持多个字符

希望它能以某种方式帮助你

于 2012-05-17T14:18:50.680 回答
3

您可以使用KeyEvent.getDisplayLabel()来获取键的主要字符。换句话说,物理上打印在其上的标签。

于 2012-05-16T14:06:18.227 回答
3

为了测试找到的答案,您可以这样做:

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {

    char pressedKey = (char) event.getUnicodeChar();

    Log.d("onKeyUp is: ", Character.toString(pressedKey));


    return super.onKeyUp(keyCode, event);

}

你按下的字母应该出现在logcat

于 2015-10-31T17:55:31.320 回答
1

您必须像这样检查哪个键被按下

if(keyCode  == KeyEvent.KEYCODE_ENTER){

syslog.d ("TEST", "The pressed key in Android keyboard was Enter" );
}

这是您找到所有 KeyEvents 的链接

http://developer.android.com/reference/android/view/KeyEvent.html

于 2012-05-16T12:34:25.127 回答
0
KEYCODE_XX is an int

您可以拥有一个以 keycode 作为参数的方法,并在其中使用 switch case 来执行特定任务。如下所示,

void getEvent(KeyEvent keyEvent){

    char pressedKey = (char) keyEvent.getUnicodeChar();

    switch(pressedKey){
        case A://
        syslog.d ("TEST", "The pressed key in Android keyboard was Enter" );
        //DO what you wnat with this event
        break;
        case B:
        syslog.d ("TEST", "The pressed key in Android keyboard was B" );
        //DO what you wnat with this event
        break;
        // so on to check other keys
    }
}

这样,您可以使用 Unicode 来获取相应的值,并且可以将其与键侦听器一起使用以连续获取事件

于 2012-05-16T13:08:14.353 回答