【发布时间】:2017-06-17 20:28:38
【问题描述】:
我正在编写一个 IME。如您所料,它扩展了 InputMethodService。
在 onCreate() 中,我得到一个 KeyCharacterMap:
keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
我需要一种为任意 Unicode 字符注入幻像按键的方法。我的第一个刺看起来像这样:
public void generatePhantomKeypress(char[] c) {
KeyEvent[] keySequence = charMap.getEvents(c);
for (KeyEvent k : keySequence)
getCurrentInputConnection().sendKeyEvent(k);
}
它适用于字母、数字和一些标点符号,但它似乎只适用于您可以在 PC 键盘上直接输入的字符(无需死键体操或使用 alt 键盘)。
某些特定字符会导致 charMap.getEvents(...) 在传递具有以下值的单个元素的 char[] 时返回 null:
- 欧元符号'€' (\u20ac)
- 英镑符号'£' (\u00a3)。
- 它还会卡住重音字符,例如 'é' (\uc3a9)
TL/DR:给定一个 char,其值为任意 Unicode 值,如何将其转换为 KeyEvent(或 KeyEvent 对象序列),当传递给 sendKeyEvent() 时,将导致 Android 采取行动就像您直接从幻象键盘输入该字符一样?
【问题讨论】:
标签: android android-softkeyboard android-input-method