当前位置: 代码迷 >> Android >> Android 软键盘相干
  详细解决方案

Android 软键盘相干

热度:63   发布时间:2016-05-01 15:18:29.0
Android 软键盘相关
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,     ".,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的注释
/** * 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 [email protected] #NUMERIC}, [email protected] #PREDICTIVE} or [email protected] #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
  相关解决方案