0
我在寫IME。正如你所期望的那樣,它擴展了InputMethodService。如何爲任意Unicode字符創建Android KeyEvent?
在的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);
}
它爲字母,數字和一些標點符號,但似乎只爲你可以直接輸入文字(不deadkey-體操或使用ALT鍵)工作在PC鍵盤上。
一些特定字符時,通過一個char []與一個單一的元素,其值是以下中導致charMap.getEvents(...)返回NULL:
- 歐元符號「€」(\ u20ac)
- 英鎊符號'£'(\ u00a3)。
- 它還扼流圈重音字符,如「E」(\ uc3a9)
TL/DR:給定一個字符,其值是一些任意的Unicode值,你怎麼把它轉換成的KeyEvent(或KeyEvent對象序列),當傳遞給sendKeyEvent()時,會導致Android如同直接從幻像鍵盤輸入該字符一樣行事?
如果您不使用預測,您可以使用inputConnection.commit()嗎? (我正在創建一個使用藍牙鼠標上的按鈕輸入Morse(-ish)代碼)的IME – Bitbang3r
是的。輸入連接與預測無關。它是連接到鍵盤和鍵盤應用程序的View之間的通信通道。 –
謝謝,完美的作品! :-) – Bitbang3r