首先,我要說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

arrow
arrow
    全站熱搜

    owenhuangtw 發表在 痞客邦 留言(0) 人氣()