如何为任意Unicode字符创建Android KeyEvent?
我在写输入法。正如您所期望的,它扩展了InputMethodService 在onCreate()中,我获得一个KeyCharacterMap:如何为任意Unicode字符创建Android KeyEvent?,android,android-softkeyboard,android-input-method,Android,Android Softkeyboard,Android Input Method,我在写输入法。正如您所期望的,它扩展了InputMethodService 在onCreate()中,我获得一个KeyCharacterMap: keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); 我需要一种方法为任意Unicode字符注入幻像按键。我的第一刀看起来像这样: public void generatePhantomKeypress(char[] c) { KeyEvent[]
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键盘)
某些特定字符,当传递带有单个元素的char[]时,会导致charMap.getEvents(…)返回null,该元素的值为以下值之一:
- 欧元符号“€”(\u20ac)
- 英镑符号“英镑”(\u00a3)李>
- 它还会阻塞重音字符,如“é”(\uc3a9)
TL/DR:给定一个值为任意Unicode值的字符,如何将其转换为KeyEvent(或KeyEvent对象序列),当传递到sendKeyEvent()时,将使Android表现为直接从虚拟键盘输入该字符?通常IME不会生成键事件。它通常使用inputConnection.commit()向应用程序发送数据。该API采用任何字符序列(甚至可以包括有限的样式)。如果不使用预测,是否可以使用inputConnection.commit()?(我正在创建一个IME,它使用蓝牙鼠标上的按钮输入摩尔斯电码)是的。输入连接与预测无关。它是连接到键盘的视图和键盘应用程序之间的一个通信通道。@Bitbang3r,您能分享一下最终实现的片段吗。我正在与一个类似的场景作斗争,控制字符很容易,但除了基本拉丁语和标点符号之外的任何东西似乎都无法实现。