gpt4 book ai didi

android - 将 unicode 值转换为 OnKeyboardActionListener.onKey 中的 KeyEvent 常量

转载 作者:行者123 更新时间:2023-11-29 02:11:31 29 4
gpt4 key购买 nike

我是 Android 开发的新手,目前正在为 Google Android 操作系统(API 级别 11 == 版本 3.0)编写输入法编辑器 (IME)。

(为了指出问题,简化了以下代码。)

我可以通过以下方式将字符发送到底层应用程序:

@Override
public final void onKey(final int primaryCode, final int[] keyCodes) {
this.getCurrentInputConnection().commitText(String.valueOf((char) primaryCode), 1);
}

现在我想发送特殊组合键(例如 SHIFT + A)。实现此目标的 Java 代码如下(针对 SHIFT + A 的特殊情况):

@Override
public final void onKey(final int primaryCode, final int[] keyCodes) {
long eventTime = SystemClock.uptimeMillis();
this.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT);

KeyEvent keyEvent = new KeyEvent(
eventTime,
eventTime,
KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_A, // ToDo: How to convert primaryCode to the corresponding KeyEvent constant?
KeyEvent.META_SHIFT_ON
);
this.getCurrentInputConnection().sendKeyEvent(keyEvent);
}

public final void sendDownKeyEvent(final int keyEventCode) {
InputConnection ic = this.getCurrentInputConnection();
if (ic != null) {
long eventTime = SystemClock.uptimeMillis();
ic.sendKeyEvent(
new KeyEvent(
eventTime, eventTime,
KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE
)
);
}
}

前面代码示例中的注释显示了我的问题。要通过 KeyEvent 对象发送组合键,我必须将变量 primaryCode(包含按下键的 unicode 代码)转换为 KeyEvent 类的常量.

是否已经存在针对这种情况的便捷方法,还是必须自己编写?一般而言:上述发送键组合的解决方案是否优雅或是否存在更好的方法? (在 Internet 上很难找到 Android IME 的示例...)

提前致谢!

最佳答案

看来有点晚了。我找到了针对同一问题的以下解决方案,将 primaryCode 转换为 KeyEvents 序列。

解决方案包括加载一个 KeyCharacterMap 并使用其 KeyCharacterMap.getEvents() 方法获取可以重现该字符的 KeyEvent 列表。

//This snippet tries to translate the glyph 'primaryCode' into key events

//retrieve the keycharacter map from a keyEvent (build yourself a default event if needed)
KeyCharacterMap myMap=KeyCharacterMap.load(event.getDeviceId());

//event list to reproduce glyph
KeyEvent evs[]=null;

//put the primariCode into an array
char chars[]=new char[1];
chars[0]=primaryCode;

// retrieve the key events that could have produced this glyph
evs=myMap.getEvents(chars);

if (evs != null){
// we can reproduce this glyph with this key event array
for (int i=0; i< evs.length;i++) MySendKeyEventHelperMethod(evs[i]);
}
else { /* could not find a way to reproduce this glyph */ }

关于android - 将 unicode 值转换为 OnKeyboardActionListener.onKey 中的 KeyEvent 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7038070/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com