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  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值