Android是預設支援鍵盤的,但是支援的不夠好,所以需要我們自己根據自己的鍵盤來修改。
Android鍵盤的預設配置路徑是sdk/emulator/keymaps
有兩個最重要的檔案:
qwerty.kl 預設的KeyLayout檔案,是映射鍵盤物理矩陣的ScanCode到系統的KeyCode的一個關係。這個需要我們事Crowdsourced Security Testing道我們的鍵盤矩陣值。如果廠家不提供,就自己一個一個Log列印。
這個檔案的格式,很多網路的資料都提供,可以瞭解下。下面只簡單的說明
key 158 BACK WAKE_DROPPED
key 230 SOFT_RIGHT WAKE
第一列Key 表示一行有效開始,注釋行用#開頭
第二列表示Scancode ,是鍵盤物理裝置的矩陣掃描碼值
第三列表示系統裡面的按鍵碼Keycode,這樣物理鍵盤和作業系統就對應起來了。
第四列表示KeyCode的Flag資訊,可有可無,一般有三種狀態
空 沒有附加資訊
WAKE 當機器處理Sleep狀態,可以喚醒,按鍵資訊繼續被處理
WAKE_DROPPED 當機器處於Sleep狀態,可以喚醒,但是丟棄按鍵資訊
這裡是一一映射的關係。需要根據鍵盤的不同來處理。
如果是正規的做法,ScanCode對應鍵盤值在不同的國家鍵盤中時不會變的,例如常用的US鍵盤。但是有時沒有UK的矩陣,只能用US的,
這個時候就需要我們軟體去更改這個ScanCode和KeyCode的映射關係。嚴重不推薦這種非標準化做法。
qwerty.kcm 預設的KeyCharacterMap檔案。這個檔案的作用就是我們在處理單獨按鍵或者按鍵組合的時候,系統輸入顯示的字元。記住這裡是字元,裡面以Unicode(UTF8)碼值存在。這個問題困擾了我很久。
這裡把一些常用的字元列出來。大家可以參考他們的Unicode值,填入到矩陣列表總即可。
下面簡單的描述下這個格式:
# keycode display number base caps fn caps_fn
A 'A' '2' 'a' 'A' '#' 0x00
這裡第一列KeyCode就是我們通過.kl檔案的ScanCode轉換過來的了。
KeyCode 提供給系統的KeyCode
display 鍵盤上顯示的字元(絲印)
number 一般不需要
base 不使用按鍵組合預設顯示的字元
caps Shift + 按鍵 顯示的字元
fn Alt + 按鍵 顯示的字元
caps_fn Shift +Alt+按鍵 顯示的字元
其中base,caps,fn,caps_fn都可以通過Unicode碼制來表示。例如你可以寫
'A',也可以寫0x41.
一般鍵盤中會有很多的按鍵組合,可能會碰見各種奇怪的字元,這裡我列舉以下字元,他們的Unicode可以通過
http://www.unicodemap.org/search.asp?search=
複製你所需要的字元,然後可以查詢到字元對應的Unicode碼制。
常用字元集合:
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ / ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z {} ~ ¢ £ ¤ ¥§ ¨ a - ˉ ° ± 2 3 ′ μ · 1 o à á è é ê ì í D ò ó × ù ú ü Y T à á
a è é ê ì í e ò ó ÷ ù ú ü y t ā ā ē ē ě ě ī ī ń ň ō ō ū ū ∥ ǎ ǎ ǐ ǐ ǒ ǒ ǔ ǔ ǖ ǖ ǘ ǘ ǚ ǚ ǜ ǜ ɑ ɡ ˇ ˉ ˊ ˋ ˙ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω Ё А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ
Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё‐ - - - ‖ ‘ ' " " ‥ ... ‰ ′ ″ ‵ ※  ̄ ℃ ℅ ℉ № ℡ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ← ↑ → ↓ ∈ ∏ ∑ ∕ ° √ ∝ ∞ ∟ ∠ ∣ ∥ ∧ ∨ ∩ ∪ ∫ ∮ ∴ ∵ ∶ ∷ ~ ∽ ≈ ≌ ≒ ≠ ≡ ≤ ≥ ≦ ≧ ≮ ≯ ⊕ ⊙
⊥ ⊿ ⌒ 壹 二 ③ 四 伍 ⑥ 七 ⑧ ⑨ ⑩ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊
╋ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯ ╰ ╱ ╲ ╳ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▓ ▔ ▕ ■ □ ▲ △ ▼ ▽ ◆ ◇ ○ ◎ ● ◢ ◣ ◤ ◥ ★ ☆ ☉ ♀ ♂、 。 〃 々 〆 〇 〈 〉 《 》 「 」 『 』 【 】 〒 〓 〔 〕 〖 〗 〝 〞 〡 〢 〣 〤 〥 〦 〧 〨 〩 ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ
ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で 之 ど な に ぬ ね の は ば ぱ ひ び ぴ 子 ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゛ ゜ ゝ ゞ ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ
ミ ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ 兒 レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ ー ヽ ヾ ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ 日 ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ ㈱ ㊣ ㎎ ㎏ ㎜ ㎝ ㎞ ㎡ ㏄ ㏎ ㏑ ㏒ ㏕ ︰ ︱ ︳ ︴ ︵ ︶ ︷ ︸ ︹ ︺ ︻ ︼ ︽ ︾ ︿ ﹀ ﹁ ﹂ ﹃ ﹄ ﹉ ﹊ ﹋ ﹌ ﹍ ﹎ ﹏ ﹐ ﹑ ﹒ ﹔ ﹕ ﹖ ﹗ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ﹟
﹠ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹨ ﹩ ﹪ ﹫ ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ¢ £ ¬  ̄ ¦
真 筆 特 殊 文 字
丨 丩 爿丶 丷 丿 乀 乙 乂 乄 乆 乛 亅 亠 亻 冂 冫冖 凵 刂 訁 辶 釒 钅 阝 飠 牜 饣卩 卪 厸 厶 厽 孓 宀 川 巜 彳 廴 三 彐 彳 忄 扌 攵 氵灬 爫 犬 病 癶 礻 糹 糸 罒岡 耂 艸 虍 言 西 兦 亼 亽 亖 亗 盲 凸 凹 卝 卍 卐 匸 皕 旡 玊 尐 幵 木囘 囙 囚 四 囜 囝 回 囟 因 女 團 団 囤 亢 囦 囧 囨 雲 囪 囫 囬 園 化 囯 困 囪 囲 図 圍 掄 囶 囷 正 囹 固 囻 囼 國 圖 囿 圀 圁 圂 圃 吾 圅 圓 圇 圈 幸 青 國 圌
圍 園 圏 圐 圑 員 圓 圔 圕 圖 圗 團 圙 圚 圛 圈 圝 圞
字 符 組 合
、 ︶ㄣ ┈┾ べ_ ╄→ ^o^ ^ǒ^ ╭ァ _ _/~ ▄︻┻┳═壹 じò ぴé ; ┢┦ (*^﹏^*)
不僅僅是鍵盤,很多的IME耶需要來處理這個動作的部分。