2012-05-16 5 views
4

Я хочу получить значение char для события KeyCode при нажатии на клавиатуру Android.Android - Как преобразовать KeyEvent 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); 

} 

У кого-нибудь есть ключ, как это сделать ?!

UPDATE:

Я не хочу жестко запрограммированный текст! Я хочу преобразовать его в соответствующий символ!

UPDATE 2:

мне нужно также мертвые символы, такие как: а, а, о, о, и т.д ...

ОТВЕТ НАЙДЕН:

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

ВАЖНОЕ ПРИМЕЧАНИЕ: char имеет только 1 байтовую длину, поэтому он будет не поддержка нескольких символов

+0

в Java 'char' является UTF-16, так что он может держать все [Basic Multilingual Plane] (Http: //en.wikipedia. org/wiki/Plane_% 28Unicode% 29 # Basic_Multilingual_Plane) – bigstones

ответ

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

+0

@SachinGurnami Я не хочу этого жестко закодированного. Для int event = KeyEvent.KEYCODE_G, я могу перевести это на «G»! – Jorge

+0

затем используйте keyEvent.getUnicodeChar(); –

0
KEYCODE_XX is an int 

Вы можете иметь метод, имеет ключевой код в качестве параметра и использует в нем ключ переключения для выполнения задания . как показано ниже,

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, чтобы получить соответствующие значения, и вы можете использовать это с ключом слушателя, чтобы получить события непрерывно

+0

@ Vincent ... Я не хочу этого жестко закодированного. Для int event = KeyEvent.KEYCODE_G я могу перевести это на «G»! – Jorge

+0

@Jorge: проверьте обновленный ответ –

2

Вы можете использовать KeyEvent.getDisplayLabel(), чтобы получить первичный символ для ключа. Другими словами, ярлык, который физически напечатан на нем.

+0

Мне также нужны мертвые символы, такие как: à, á, ò, ó и т. Д. – Jorge

6

> Я уже ответил обновляя вопрос

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

ВАЖНО: символ имеет только 1 длину байт, поэтому он не будет поддерживать несколько символов

Надеюсь, что это поможет вам как-то

+2

просто примечание: в java char есть 2 байта – bughi

1

Для тестирования Ответ Найдено Вы можете сделать это:

@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

Смежные вопросы