Android - 如何将KeyEvent KeyCode转换为Char?

8
我想在按下安卓键盘时获取 KeyCode 事件的字符值。
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字节长度,因此它不支持多个字符。


在Java中,char是UTF-16编码,因此它可以保留所有基本多文种平面的字符。 - bigstones
5个回答

12

我已经回答了更新后的问题。

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

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

希望这能在某种程度上对您有所帮助。


3
注意:在Java中,char类型占用2个字节。 - bughi

4

为了测试答案发现,您可以这样做:

@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中。


3
你可以使用 KeyEvent.getDisplayLabel() 来获取按键的主要字符。换句话说,就是在其上实际打印的标签。

我还需要处理一些特殊字符,如:à, á, ò, ó 等等... - Jorge

1

@SachinGurnami 我不想硬编码。对于 int event=KeyEvent.KEYCODE_G,我可以将其翻译为“G”! - Jorge
然后使用keyEvent.getUnicodeChar(); - Sachin Gurnani

0
KEYCODE_XX is an int

你可以创建一个带有按键码参数的方法,并在其中使用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获取相应的值,并使用键监听器连续获取事件


@Vincent... 我不想硬编码。对于 int event=KeyEvent.KEYCODE_G,我可以将其翻译为“G”! - Jorge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接