将字符转换为键码

时间:2013-09-06 14:30:31

标签: android

我有一个字符,我想将其转换为KeyEvent KeyCode约束http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_0

如果我有一个字符'0',我想转换成

  

密钥代码常量:'0'密钥。

     

常数值: 7 (0x00000007)

在KeyEvent页面中指定。这可能是最好的方法吗?有任何预定义的功能吗?

4 个答案:

答案 0 :(得分:9)

这是我用来将字符放在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

答案 1 :(得分:2)

不,您无法从输入中读取字符“0”并使用魔法函数将其转换为KeyEvent.KEYCODE_0 ...如果您这样做,则必须编写一个解析器来打开读取的字母并返回这些价值观本身。

就我所知,在阅读角色之前,你应该抓住onKey()中的东西。根据您需要以这种方式处理的键的数量,虚拟安卓键盘可能是您唯一的选择,如果此样板代码不能解决问题

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

答案 2 :(得分: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框架source code中阅读uiautomator方法的代码时,我明白了这一点:

答案 3 :(得分:2)

非常粗鲁的解决方案,但适用于大多数角色。

如果您的文字包含小写字母,请记得大写,如果您随后发送KeyEvent

,则可以添加META_SHIFT_ON
    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);
        }
    }