2013-09-06 4 views
10

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

Подобно этому, если у меня есть символ «0» я тусклый, чтобы преобразовать в

Key константы коды : '0'.

Константа Значение: (0x00000007)

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

+0

Знаете ли вы, что персонаж должен быть преобразован? Является ли он постоянным или будет меняться в зависимости от пользователя? – user2483079

+0

Различные клавиатуры будут использовать разные константы ... что, как говорится, KEYCODE_0 является «открытым статическим окончательным int», поэтому вы можете вызывать это имя вместо любого числа 7 через ваше приложение ... Лично мне повезло с моими KEYCODE_0 и KEYCODE_6. – Shark

+0

Да, это то, что я собирался упомянуть, но это не так просто, если это не постоянный. – user2483079

ответ

2

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

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

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

Я еще новичок в 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 рамках source code:

1

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

Не забудьте сделать заглавные буквы, если текст содержит строчные буквы, вы можете добавить 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); 
     } 
    } 
6

Вот решение, я использую, чтобы поместить символы в WebView:

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 
Смежные вопросы