问题 将字符转换为键码


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

就像我有一个字符'0'我想转换成

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

常数值: 7 (0x00000007)

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


3115
2017-09-06 14:30


起源

你知道需要转换的角色吗?它是一个常数还是会根据用户而改变? - user2483079
不同的键盘将使用不同的常量......也就是说,KEYCODE_0是一个 public static final int 所以你可以在你的应用程序中调用该名称而不是任何数字7 ...就个人而言,我的幸运数字是KEYCODE_0和KEYCODE_6。 - Shark
是的,这就是我要提到的,但如果它不是一个常数,那就不那么容易了。 - user2483079
你需要准确转换哪些字符(只有alpha num或更多?)? - njzk2


答案:


这是我用来在网页浏览中添加字符的解决方案:

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

8
2017-07-25 10:45





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

据我所知,在阅读角色之前,你应该抓住那个角色 onKey()。根据您需要以这种方式处理的键的数量,如果此样板代码不能执行此操作,则虚拟安卓键盘可能是您唯一的选择

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

2
2017-09-06 14:42





我还是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 骨架 源代码


2
2017-10-21 13:48





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

如果您的文本包含小写字母,请记得大写一个大写字母,如果您随后发送了一个字母,则可以添加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);
        }
    }

1
2018-05-21 10:43