我有一个字符,我想将其转换为KeyEvent KeyCode约束 http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_0
就像我有一个字符'0'我想转换成
密钥代码常量:'0'密钥。
常数值: 7 (0x00000007)
在KeyEvent页面中指定。这可能是最好的方法吗?有没有任何预定义的功能呢?
我有一个字符,我想将其转换为KeyEvent KeyCode约束 http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_0
就像我有一个字符'0'我想转换成
密钥代码常量:'0'密钥。
常数值: 7 (0x00000007)
在KeyEvent页面中指定。这可能是最好的方法吗?有没有任何预定义的功能呢?
这是我用来在网页浏览中添加字符的解决方案:
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
不,您无法从输入中读取字符“0”并使用魔法函数将其转换为KeyEvent.KEYCODE_0 ...如果您这样做,则必须编写一个解析器来打开读取的字母并自行返回这些值。
据我所知,在阅读角色之前,你应该抓住那个角色 onKey()
。根据您需要以这种方式处理的键的数量,如果此样板代码不能执行此操作,则虚拟安卓键盘可能是您唯一的选择
switch(keyPress)
{
case '0': return KeyEvent.KEYCODE_0;
case '1': return ...
//...
case 'Z': return KeyEvent.KEYCODE_Z;
}
我还是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
骨架 源代码:
非常粗鲁的解决方案,但适用于大多数人物。
如果您的文本包含小写字母,请记得大写一个大写字母,如果您随后发送了一个字母,则可以添加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);
}
}