首先,我要說android的keyboard layout的設計實在太神了
讓我想到鬆散結構與緊密結構的比較(各有優缺點)
Anyway,這偏要來談談android的keyboard layout and mapping
我們要找的檔案首先在
(1) android/development/emulator/keymaps/qwerty.kl (keyboard layout file)
(2) android/development/emulator/keymaps/qwerty.kcm (keyboard mapping file)
先來介紹qwerty.kl
這是一個keyboard layout 的檔案
你可以看到Linux kernel送上來的每一個scan code可以對應到android system中的keycode
而這個key code的定義在 android/framework/base/libs/ui/keylayoutmap.cpp中被系統load進來
這邊有一些qwerty.kl 的example,如下: (假設要implement hardware keypad請先設定這些key layout)
key 399 GRAVE
key 2 1
key 3 2
key 4 3
key 5 4
key 6 5
key 7 6
key 8 7
key 9 8
key 10 9
key 11 0
key 158 BACK WAKE_DROPPED
key 230 SOFT_RIGHT WAKE
key 60 SOFT_RIGHT WAKE
key 107 ENDCALL WAKE_DROPPED
key 62 ENDCALL WAKE_DROPPED
key 229 MENU WAKE_DROPPED
key 139 MENU WAKE_DROPPED
key 59 MENU WAKE_DROPPED
key 127 SEARCH WAKE_DROPPED
key 217 SEARCH WAKE_DROPPED
key 228 POUND
key 227 STAR
key 231 CALL WAKE_DROPPED
key 61 CALL WAKE_DROPPED
key 232 DPAD_CENTER WAKE_DROPPED
key 108 DPAD_DOWN WAKE_DROPPED
key 103 DPAD_UP WAKE_DROPPED
key 102 HOME WAKE
key 105 DPAD_LEFT WAKE_DROPPED
key 106 DPAD_RIGHT WAKE_DROPPED
key 115 VOLUME_UP
key 114 VOLUME_DOWN
key 116 POWER WAKE
key 212 CAMERA
key 16 Q
key 17 W
key 18 E
key 19 R
key 20 T
key 21 Y
key 22 U
key 23 I
key 24 O
key 25 P
key 26 LEFT_BRACKET
key 27 RIGHT_BRACKET
key 43 BACKSLASH
再來我們來介紹qwerty.kcm
這是keyboard mapping的重要檔案
他的檔案格式如下:
# keycode display number base caps fn caps_fn
A 'A' '!' 'a' 'A' '!' 0x00
第五個要搭配 caps + a = A
第六個fn,在android系統中沒有所謂的fn,function key,他所使用的function key就是我們的alt
所以,alt+a = !
最後一個相信聰明的你應該知道就是 caps + alt + a = 0x00 (reserve key)
那其他我這邊就不多說啦!簡單明瞭的解釋!
要implement自己的function key table
這要更改這邊的設定,不用改到任何的程式碼
真是方便多囉!
Reference
(1) http://forum.xda-developers.com/archive/index.php/t-468703.html
(2) http://www.kandroid.org/android_pdk/keymaps_keyboard_input.html
(3) http://pdk.android.com/online-pdk/guide/keymaps_keyboard_input.html
留言列表