Android2.2的Phone界面会有软键盘弹出!
原因是
mDigits.setKeyListener(DialerKeyListener.getInstance());mDigits.setInputType(InputType.TYPE_CLASS_PHONE);

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

 mHaptic.vibrate();//震动 KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode); mDigits.onKeyDown(keyCode, event);//keycode对应的就是KeyEvent.KEYCODE_1

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

static {        sRecs.put(KeyEvent.KEYCODE_1,     ".,[email protected]#$%^&*:/?'=()");        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的注释
/** * 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来控制的!
 @Override    public boolean onKeyDown(View view, Editable content,                             int keyCode, KeyEvent event) {        KeyListener im = getKeyListener(event);        return im.onKeyDown(view, content, keyCode, event);    }

KeyListener 接口对应的返回实例在这里类型有两种!
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();    }


 /**     * 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方法中的
 int i = event.getUnicodeChar(getMetaState(content));


 public int getUnicodeChar(int meta) {        return KeyCharacterMap.load(mDeviceId).get(mKeyCode, 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这个配置文件。

key 399   GRAVEkey 2     1key 3     2key 4     3key 5     4key 6     5key 7     6key 8     7key 9     8key 10    9key 11    0key 158   BACK              WAKE_DROPPEDkey 230   SOFT_RIGHT        WAKEkey 60    SOFT_RIGHT        WAKEkey 107   ENDCALL           WAKE_DROPPEDkey 62    ENDCALL           WAKE_DROPPEDkey 229   MENU              WAKE_DROPPEDkey 139   MENU              WAKE_DROPPEDkey 59    MENU              WAKE_DROPPEDkey 127   SEARCH            WAKE_DROPPEDkey 217   SEARCH            WAKE_DROPPEDkey 228   POUNDkey 227   STARkey 231   CALL              WAKE_DROPPEDkey 61    CALL              WAKE_DROPPEDkey 232   DPAD_CENTER       WAKE_DROPPEDkey 108   DPAD_DOWN         WAKE_DROPPEDkey 103   DPAD_UP           WAKE_DROPPEDkey 102   HOME              WAKEkey 105   DPAD_LEFT         WAKE_DROPPEDkey 106   DPAD_RIGHT        WAKE_DROPPEDkey 115   VOLUME_UPkey 114   VOLUME_DOWNkey 116   POWER             WAKEkey 212   CAMERAkey 16    Qkey 17    Wkey 18    Ekey 19    Rkey 20    Tkey 21    Ykey 22    Ukey 23    Ikey 24    Okey 25    Pkey 26    LEFT_BRACKETkey 27    RIGHT_BRACKETkey 43    BACKSLASHkey 30    Akey 31    Skey 32    Dkey 33    Fkey 34    Gkey 35    Hkey 36    Jkey 37    Kkey 38    Lkey 39    SEMICOLONkey 40    APOSTROPHEkey 14    DEL        key 44    Zkey 45    Xkey 46    Ckey 47    Vkey 48    Bkey 49    Nkey 50    Mkey 51    COMMAkey 52    PERIODkey 53    SLASHkey 28    ENTER        key 56    ALT_LEFTkey 100   ALT_RIGHTkey 42    SHIFT_LEFTkey 54    SHIFT_RIGHTkey 15    TABkey 57    SPACEkey 150   EXPLORERkey 155   ENVELOPE        key 12    MINUSkey 13    EQUALSkey 215   AT

更多相关文章

  1. Android中自定义Toast显示在其他界面上
  2. Android右滑返回上一个界面的实现方法
  3. Android设备WebView打印Console Log
  4. android 获取设备上安装的非系统应用信息
  5. Android 简单EventBus登录界面与传值(粘性事件)
  6. 打开app弹出欢迎界面,然后自动跳转到主界面
  7. [Android]判断当前界面是否是桌面
  8. Android Wear 进阶 - 3 Creating Custom UIs for Wear Devices
  9. Intent打开各种类型的文件

随机推荐

  1. Android 内存泄漏
  2. 开发环境之Mac上Android(安卓)Studio上虚
  3. Android开发平台简介
  4. Android多媒体数据库之MediaStore研究
  5. Webview实现Android和JS通信
  6. CAMERA(12)---[Android相机]光线传感器识
  7. android 那些事---主线程是线程不安全的
  8. android json 转换
  9. android inputType属性
  10. Android(Java):把EHCache集成到android项