Преобразование символа в кодовый ключ

У меня есть символ, и я хочу преобразовать его в ограничения KeyEvent KeyCode http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_0

Как будто у меня есть символ "0", я хочу преобразовать в

Key code constant: '0'.

Постоянное значение: 7 (0x00000007)

как указано на странице KeyEvent. Что может быть лучшим способом для этого? Есть ли какая-либо предопределенная функция?

Ответ 1

Вот решение, которое я использую для добавления символов в веб-просмотр:

char[] szRes = szStringText.toCharArray(); // Convert String to Char array

KeyCharacterMap CharMap;
if(Build.VERSION.SDK_INT >= 11) // My soft runs until API 5
    CharMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
else
    CharMap = KeyCharacterMap.load(KeyCharacterMap.ALPHA);

KeyEvent[] events = CharMap.getEvents(szRes);

for(int i=0; i<events.length; i++)
    MainWebView.dispatchKeyEvent(events[i]); // MainWebView is webview

Ответ 2

Нет, вы не можете прочитать символ "0" со входа и использовать магическую функцию для преобразования этого ключа в KeyEvent.KEYCODE_0... Если вы это сделаете, вам придется написать парсер, который включает прочитанное письмо и возвращает эти значения сами.

Насколько мне известно, перед чтением персонажа вы должны были захватить вещь в onKey(). В зависимости от количества ключей, которые вам нужно обрабатывать таким образом, виртуальная клавиатура Android может быть вашим единственным вариантом, если этот шаблонный код не выполняет трюк

switch(keyPress)
{
  case '0': return KeyEvent.KEYCODE_0;
  case '1': return ...
  //...
  case 'Z': return KeyEvent.KEYCODE_Z;
}

Ответ 3

Я все еще новичок в Java/Android, поэтому мой ответ может не работать из коробки, но вы все еще можете получить эту идею.

import android.view.KeyCharacterMap;
import android.view.KeyEvent;    
...
public class Sample {
    ...
    public boolean convertStringToKeyCode(String text) {

        KeyCharacterMap mKeyCharacterMap = 
            KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);

        KeyEvent[] events = mKeyCharacterMap.getEvents(text.toCharArray());

        for (KeyEvent event2 : events) {
            // We get key events for both UP and DOWN actions,
            // so we may just need one.
            if (event2.getAction() == 0) {
                int keycode = event2.getKeyCode();
                // Do some work
            }
        }
}

У меня возникла идея, когда я читал код метода sendText в uiautomator framework исходный код:

Ответ 4

Очень грубое решение, но работает для большинства персонажей.

Не забудьте сделать прописную букву, если ваш текст содержит строчные буквы, вы можете добавить META_SHIFT_ON в этом случае, если вы отправите KeyEvent

    for (int i = 0; i < text.length(); i++) {
        final char ch = text.charAt(i);
        try {
            dispatch(KeyEvent.class.getField("KEYCODE_" + ch).getInt(null));
        } catch (Exception e) {
            Log.e(_TAG, "Unknown keycode for " + ch);
        }
    }