如何为任意 Unicode 字符创建 Android KeyEvent?
How to create Android KeyEvent for arbitrary Unicode character?
我正在编写输入法。如您所料,它扩展了 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(...) 到 return null 当传递一个具有单个元素的 char[] 时,其值为以下值:
- 欧元符号“€”(\u20ac)
- 英镑符号 '£' (\u00a3)。
- 它还会因重音字符而窒息,例如 'é' (\uc3a9)
TL/DR:给定一个值为任意 Unicode 值的字符,如何将其转换为 KeyEvent(或 KeyEvent 对象序列),当传递给 sendKeyEvent() 时, 会导致 Android 就像您直接从幻像键盘输入该字符一样?
通常 IME 不会生成按键事件。它通常使用 inputConnection.commit() 向应用程序发送数据。 API 采用任何 CharSequence(甚至可以包括有限的样式)。
我正在编写输入法。如您所料,它扩展了 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(...) 到 return null 当传递一个具有单个元素的 char[] 时,其值为以下值:
- 欧元符号“€”(\u20ac)
- 英镑符号 '£' (\u00a3)。
- 它还会因重音字符而窒息,例如 'é' (\uc3a9)
TL/DR:给定一个值为任意 Unicode 值的字符,如何将其转换为 KeyEvent(或 KeyEvent 对象序列),当传递给 sendKeyEvent() 时, 会导致 Android 就像您直接从幻像键盘输入该字符一样?
通常 IME 不会生成按键事件。它通常使用 inputConnection.commit() 向应用程序发送数据。 API 采用任何 CharSequence(甚至可以包括有限的样式)。