Android之硬鍵盤字元對應表——KeyCharacterMap

來源:互聯網
上載者:User

Android之硬鍵盤對應----字元對應表KeyCharacterMap

預備基礎知識:

http://source.android.com/porting/keymaps_keyboard_input.html

http://blog.csdn.net/skdev/archive/2010/03/08/5355542.aspx    鍵盤對應流程,講的已經很詳細了。

http://www.kandroid.org/android_pdk/keymaps_keyboard_input.html

      如何?了一鍵對應多個字元的輸出
     如果你的鍵盤是全鍵盤(包括了ALT、SHIFT、CAPS_LOCK功能鍵)基本上用Android預設的鍵盤對應檔案qwerty.kcm,qwerty.kl就可以了。如果需要修改按鍵映射字元可以修改kcm 檔案, 如果不幸遇上NC的產品設計人員,拍腦袋搞出一個殘缺不全的鍵盤出來,就要動點心思改改Android framework層了。無奈,剛好這種事被我碰上了~~~~ 只有SHIFT鍵位,只好用SHIFT來回切換來實現小寫字母、大寫字母、數字記號三種輸入,就像IME軟體盤一樣實現三種輸入模式。
   
一、什麼是META Keys:就是ALT、SHIFT、CAPS_LOCK了。

首先,需要理解kcm檔案的意義
第一列:keycode,由kernel層發出,經*.kl鍵盤對應檔案得到keycode;
base列:META_KEY沒有被啟用時的狀態,即MetaState==0時映射的字元;
caps列:毫無疑問,是SHIFT或CAPS_LOCK被啟用時的狀態,此時MetaState==1時,映射的字元;
fn列:ALT被啟用,對應MetaState==2時映射的字元;
caps_fn列:ALT,SHIFT或CAPS_LOCK同時被啟用時映射的字元;此時MetaState==3;

number列:getNumber(mKeyCode)返回該鍵代表的數值;

./base/core/java/android/view/KeyEvent.java:871:       
 public char getNumber() {
        return KeyCharacterMap.load(mDeviceId).getNumber(mKeyCode); 

Display列:同上,由getDisplay返回;

   通過這種方式,實現了一鍵對應多個字元的輸出,
    

Qwerty鍵盤對應語句實現位置在:frameworks/base/core/java/android/text/method/QwertyKeyListener.java檔案中
   int i = event.getUnicodeChar(getMetaState(content));//getMetaState(content)分別為0,1,2,3 對應

getUnicodeChar(int meta)函數實現位於檔案frameworks/base/core/java/android/view/KeyEvent.java:   
/base/core/java/android/view/KeyCharacterMap.java:139:    
unsigned short KeyCharacterMap::get(int keycode, int meta)
您還需關注的檔案有MetaKeyKeyListener.java,在該檔案中人為地、暴力地改變MetaKey的狀態或傳回值。

二、 長按按鍵時,彈出帶音標的候選字元
 代碼:public final int getRepeatCount() {  return mRepeatCount;  }
        'A', ----→ĂÀÁÂÃÅÆĄ
        'E', ---→ÈÉÊËĖĘĚ
        'I', ---→ ÌÍÎÏ Ī 
        'O', ---→ÒÓÔÕÖŎŐ
        'U',---→ ÙÚÛÜŰŲ
        'a', ---→àáâãäåæ
        'e',--→ èéêëëě
        'o',---→ òóôő
        'u', --→ùúûüűųūŭ

三、附表:本人做的俄文鍵盤
[type=QWERTY]                                           
                                                        
# keycode       display number  base    caps    fn      caps_fn
                                                        
A               'A'     0x00     'a'     'A'     0x0424    0x0444
B               'B'     0x00     'b'     'B'     0x0418   0x0438
C               'C'     0x00     'c'     'C'     0x0421     0x0441
D               'D'     0x00     'd'     'D'     0x0412     0x0432
E               'E'     '3'           'e'     'E'     0x0423     0x0443
F               'F'     0x00        'f'     'F'     0x0410     0x0430
G               'G'     0x00     'g'     'G'     0x041F     0x043F
H               'H'     0x00     'h'     'H'     0x0420    0x0440
I                 'I'      '8'              'i'     'I'      0x0428    0x0448
J               'J'     0x00         'j'     'J'     0x041E    0x043E
K               'K'     0x00      'k'     'K'     0x041B    0x043B
L               'L'     0x00        'l'     'L'     0x0414    0x0434
M               'M'     0x00     'm'     'M'     0x042C    0x044C
N               'N'     0x00     'n'     'N'     0x0422    0x0442
O               'O'     '9'          'o'     'O'      0x0429    0x0449
P               'P'     '0'           'p'     'P'      0x0417    0x0437
Q               'Q'     '1'          'q'     'Q'      0x0419    0x0439
R               'R'     '4'          'r'     'R'      0x041A    0x043A
S               'S'     0x00     's'     'S'     0x042B    0x044B
T               'T'     '5'            't'     'T'      0x0415    0x0435
U               'U'     '7'          'u'     'U'      0x0413    0x0433
V               'V'     0x00     'v'     'V'       0x041C    0x043C
W               'W'     '2'        'w'     'W'      0x0426    0x0446
X               'X'     0x00      'x'     'X'     0x0427    0x0447
Y               'Y'     '6'            'y'     'Y'      0x041D    0x043D
Z               'Z'     0x00         'z'     'Z'     0x042F    0x044F
                                                        
# on pc keyboards
COMMA           ','     ','     ','     ';'     ';'     '|'
PERIOD          '.'     '.'     '.'     ':'     ':'     0x2026
AT              '@'     '0'     '@'     '0'     '0'     0x2022
SLASH           '/'     '/'     '/'     '?'     '?'     '/'

                                                     
SPACE           0x20    0x20    0x20    0x20    0xEF01  0xEF01   //註:   Android接收到字元值 0xEF01 時,彈出特別字元選擇框 

ENTER         0xa     0xa     0xa     0xa     0xa     0xa
                                                        
TAB             0x9     0x9     0x9     0x9     0x9     0x9
0               '0'     '0'     '0'     ')'     ')'     ')'
1               '1'     '1'     '1'     '!'     '!'     '!'
2               '2'     '2'     '2'     '@'     '@'     '@'
3               '3'     '3'     '3'     '#'     '#'     '#'
4               '4'     '4'     '4'     '$'     '$'     '$'
5               '5'     '5'     '5'     '%'     '%'     '%'
6               '6'     '6'     '6'     '^'     '^'     '^'
7               '7'     '7'     '7'     '&'     '&'     '&'
8               '8'     '8'     '8'     '*'     '*'     '*'
9               '9'     '9'     '9'     '('     '('     '('
                                                        
GRAVE           '`'     '`'     '`'     '~'     '`'     '~'
MINUS           '-'     '-'     '-'     '_'     '-'     '_'
EQUALS          '='     '='     '='     '+'     '='     '+'
LEFT_BRACKET    '['     '['     '['     '{'     '['     '{'
RIGHT_BRACKET   ']'     ']'     ']'     '}'     ']'     '}'
BACKSLASH       '/'     '/'     '/'     '|'     '/'     '|'
SEMICOLON       ';'     ';'     ';'     ':'     ';'     ':'
APOSTROPHE      '''     '''     '''     '"'     '''     '"'
STAR            '*'     '*'     '*'     '*'     '*'     '*'
POUND           '#'     '#'     '#'     '#'     '#'     '#'
PLUS            '+'     '+'     '+'     '+'     '+'     '+'

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.