Android 软键盘相关

Android 软键盘相关

原文地址:http://yelinsen.iteye.com/blog/824487

 

Android2.2的Phone界面会有软键盘弹出!
原因是
Java代码 复制代码  收藏代码
  1. mDigits.setKeyListener(DialerKeyListener.getInstance());   
  2. mDigits.setInputType(InputType.TYPE_CLASS_PHONE);  
mDigits.setKeyListener(DialerKeyListener.getInstance());
mDigits.setInputType(InputType.TYPE_CLASS_PHONE);

把这两行去掉并加上一句mDigits.setInputType(InputType.TYPE_NULL);就行了!
Phone那个拨号界面对应的是Contacts下的TwelveKeyDialer.java
本身采用的是
Java代码 复制代码  收藏代码
  1. playTone(ToneGenerator.TONE_DTMF_1);//生音是否显示   
  2. keyPressed(KeyEvent.KEYCODE_1);//输入的数字  
playTone(ToneGenerator.TONE_DTMF_1);//生音是否显示
keyPressed(KeyEvent.KEYCODE_1);//输入的数字

Java代码 复制代码  收藏代码
  1. mHaptic.vibrate();//震动   
  2. KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);   
  3. mDigits.onKeyDown(keyCode, event);//keycode对应的就是KeyEvent.KEYCODE_1  
 mHaptic.vibrate();//震动
 KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
 mDigits.onKeyDown(keyCode, event);//keycode对应的就是KeyEvent.KEYCODE_1

keyCode对应的去取对应的值!这个值对应的在MultiTapKeyListener.java中有定义!

Java代码 复制代码  收藏代码
  1. static {   
  2.         sRecs.put(KeyEvent.KEYCODE_1,     ".,1!@#$%^&*:/?'=()");   
  3.         sRecs.put(KeyEvent.KEYCODE_2,     "abc2ABC");   
  4.         sRecs.put(KeyEvent.KEYCODE_3,     "def3DEF");   
  5.         sRecs.put(KeyEvent.KEYCODE_4,     "ghi4GHI");   
  6.         sRecs.put(KeyEvent.KEYCODE_5,     "jkl5JKL");   
  7.         sRecs.put(KeyEvent.KEYCODE_6,     "mno6MNO");   
  8.         sRecs.put(KeyEvent.KEYCODE_7,     "pqrs7PQRS");   
  9.         sRecs.put(KeyEvent.KEYCODE_8,     "tuv8TUV");   
  10.         sRecs.put(KeyEvent.KEYCODE_9,     "wxyz9WXYZ");   
  11.         sRecs.put(KeyEvent.KEYCODE_0,     "0+");   
  12.         sRecs.put(KeyEvent.KEYCODE_POUND, " ");   
  13.     };  
static {
        sRecs.put(KeyEvent.KEYCODE_1,     ".,1!@#$%^&*:/?'=()");
        sRecs.put(KeyEvent.KEYCODE_2,     "abc2ABC");
        sRecs.put(KeyEvent.KEYCODE_3,     "def3DEF");
        sRecs.put(KeyEvent.KEYCODE_4,     "ghi4GHI");
        sRecs.put(KeyEvent.KEYCODE_5,     "jkl5JKL");
        sRecs.put(KeyEvent.KEYCODE_6,     "mno6MNO");
        sRecs.put(KeyEvent.KEYCODE_7,     "pqrs7PQRS");
        sRecs.put(KeyEvent.KEYCODE_8,     "tuv8TUV");
        sRecs.put(KeyEvent.KEYCODE_9,     "wxyz9WXYZ");
        sRecs.put(KeyEvent.KEYCODE_0,     "0+");
        sRecs.put(KeyEvent.KEYCODE_POUND, " ");
    };


根据这个MultiTapKeyListener.java的注释
Java代码 复制代码  收藏代码
  1. /**  
  2.  * This is the standard key listener for alphabetic input on 12-key  
  3.  * keyboards.  You should generally not need to instantiate this yourself;  
  4.  * TextKeyListener will do it for you.  
  5.  */  
/**
 * This is the standard key listener for alphabetic input on 12-key
 * keyboards.  You should generally not need to instantiate this yourself;
 * TextKeyListener will do it for you.
 */

说明实际是由TextKeyListener.java来控制的!
Java代码 复制代码  收藏代码
  1. @Override  
  2.    public boolean onKeyDown(View view, Editable content,   
  3.                             int keyCode, KeyEvent event) {   
  4.        KeyListener im = getKeyListener(event);   
  5.   
  6.        return im.onKeyDown(view, content, keyCode, event);   
  7.    }  
 @Override
    public boolean onKeyDown(View view, Editable content,
                             int keyCode, KeyEvent event) {
        KeyListener im = getKeyListener(event);

        return im.onKeyDown(view, content, keyCode, event);
    }

KeyListener 接口对应的返回实例在这里类型有两种!
Java代码 复制代码  收藏代码
  1. private KeyListener getKeyListener(KeyEvent event) {   
  2.         KeyCharacterMap kmap = KeyCharacterMap.load(event.getKeyboardDevice());   
  3.         int kind = kmap.getKeyboardType();   
  4.   
  5.         if (kind == KeyCharacterMap.ALPHA) {   
  6.             return QwertyKeyListener.getInstance(mAutoText, mAutoCap);   
  7.         } else if (kind == KeyCharacterMap.NUMERIC) {   
  8.             return MultiTapKeyListener.getInstance(mAutoText, mAutoCap);   
  9.         }   
  10.   
  11.         return NullKeyListener.getInstance();   
  12.     }  
private KeyListener getKeyListener(KeyEvent event) {
        KeyCharacterMap kmap = KeyCharacterMap.load(event.getKeyboardDevice());
        int kind = kmap.getKeyboardType();

        if (kind == KeyCharacterMap.ALPHA) {
            return QwertyKeyListener.getInstance(mAutoText, mAutoCap);
        } else if (kind == KeyCharacterMap.NUMERIC) {
            return MultiTapKeyListener.getInstance(mAutoText, mAutoCap);
        }

        return NullKeyListener.getInstance();
    }


Java代码 复制代码  收藏代码
  1. /**  
  2.     * Returns {@link #NUMERIC}, {@link #PREDICTIVE} or {@link #ALPHA}.  
  3.     */  
  4.    public int getKeyboardType()   
  5.    {   
  6.        return getKeyboardType_native(mPointer);   
  7.    }  
 /**
     * Returns {@link #NUMERIC}, {@link #PREDICTIVE} or {@link #ALPHA}.
     */
    public int getKeyboardType()
    {
        return getKeyboardType_native(mPointer);
    }

private static native int getKeyboardType_native(int ptr);返回NUMERIC数值类型或ALPHA希腊字母类型或PREDICTIVE这个返回的实际就是空的类型.

最后这个值是怎么取出来的列!已返回QwertyKeyListener.getInstance(mAutoText, mAutoCap);为例。
在QwertyKeyListener的onKeyDown方法中的
Java代码 复制代码  收藏代码
  1. int i = event.getUnicodeChar(getMetaState(content));  
 int i = event.getUnicodeChar(getMetaState(content));


Java代码 复制代码  收藏代码
  1. public int getUnicodeChar(int meta) {   
  2.        return KeyCharacterMap.load(mDeviceId).get(mKeyCode, meta);   
  3.    }  
 public int getUnicodeChar(int meta) {
        return KeyCharacterMap.load(mDeviceId).get(mKeyCode, meta);
    }


Java代码 复制代码  收藏代码
  1. private static native char get_native(int ptr, int keycode,   
  2.                                    int meta);  
 private static native char get_native(int ptr, int keycode,
                                    int meta);


键布局映射文件通常放在/system/usr/keylayout和/data/usr/keylayout

对于每一个键盘设备xxx,设置系统属性android.keylayout.xxx,如果没有为自己的硬件设备创建一个特定的设备,Android将去读/system/usr/keylayout/qwerty.kl这个配置文件。

Java代码 复制代码  收藏代码
  1.   
  2. key 399   GRAVE   
  3. key 2     1  
  4. key 3     2  
  5. key 4     3  
  6. key 5     4  
  7. key 6     5  
  8. key 7     6  
  9. key 8     7  
  10. key 9     8  
  11. key 10    9  
  12. key 11    0  
  13. key 158   BACK              WAKE_DROPPED   
  14. key 230   SOFT_RIGHT        WAKE   
  15. key 60    SOFT_RIGHT        WAKE   
  16. key 107   ENDCALL           WAKE_DROPPED   
  17. key 62    ENDCALL           WAKE_DROPPED   
  18. key 229   MENU              WAKE_DROPPED   
  19. key 139   MENU              WAKE_DROPPED   
  20. key 59    MENU              WAKE_DROPPED   
  21. key 127   SEARCH            WAKE_DROPPED   
  22. key 217   SEARCH            WAKE_DROPPED   
  23. key 228   POUND   
  24. key 227   STAR   
  25. key 231   CALL              WAKE_DROPPED   
  26. key 61    CALL              WAKE_DROPPED   
  27. key 232   DPAD_CENTER       WAKE_DROPPED   
  28. key 108   DPAD_DOWN         WAKE_DROPPED   
  29. key 103   DPAD_UP           WAKE_DROPPED   
  30. key 102   HOME              WAKE   
  31. key 105   DPAD_LEFT         WAKE_DROPPED   
  32. key 106   DPAD_RIGHT        WAKE_DROPPED   
  33. key 115   VOLUME_UP   
  34. key 114   VOLUME_DOWN   
  35. key 116   POWER             WAKE   
  36. key 212   CAMERA   
  37.   
  38. key 16    Q   
  39. key 17    W   
  40. key 18    E   
  41. key 19    R   
  42. key 20    T   
  43. key 21    Y   
  44. key 22    U   
  45. key 23    I   
  46. key 24    O   
  47. key 25    P   
  48. key 26    LEFT_BRACKET   
  49. key 27    RIGHT_BRACKET   
  50. key 43    BACKSLASH   
  51.   
  52. key 30    A   
  53. key 31    S   
  54. key 32    D   
  55. key 33    F   
  56. key 34    G   
  57. key 35    H   
  58. key 36    J   
  59. key 37    K   
  60. key 38    L   
  61. key 39    SEMICOLON   
  62. key 40    APOSTROPHE   
  63. key 14    DEL   
  64.            
  65. key 44    Z   
  66. key 45    X   
  67. key 46    C   
  68. key 47    V   
  69. key 48    B   
  70. key 49    N   
  71. key 50    M   
  72. key 51    COMMA   
  73. key 52    PERIOD   
  74. key 53    SLASH   
  75. key 28    ENTER   
  76.            
  77. key 56    ALT_LEFT   
  78. key 100   ALT_RIGHT   
  79. key 42    SHIFT_LEFT   
  80. key 54    SHIFT_RIGHT   
  81. key 15    TAB   
  82. key 57    SPACE   
  83. key 150   EXPLORER   
  84. key 155   ENVELOPE           
  85.   
  86. key 12    MINUS   
  87. key 13    EQUALS   
  88. key 215   AT  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值