`
yelinsen05
  • 浏览: 497890 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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 {@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   GRAVE
key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 158   BACK              WAKE_DROPPED
key 230   SOFT_RIGHT        WAKE
key 60    SOFT_RIGHT        WAKE
key 107   ENDCALL           WAKE_DROPPED
key 62    ENDCALL           WAKE_DROPPED
key 229   MENU              WAKE_DROPPED
key 139   MENU              WAKE_DROPPED
key 59    MENU              WAKE_DROPPED
key 127   SEARCH            WAKE_DROPPED
key 217   SEARCH            WAKE_DROPPED
key 228   POUND
key 227   STAR
key 231   CALL              WAKE_DROPPED
key 61    CALL              WAKE_DROPPED
key 232   DPAD_CENTER       WAKE_DROPPED
key 108   DPAD_DOWN         WAKE_DROPPED
key 103   DPAD_UP           WAKE_DROPPED
key 102   HOME              WAKE
key 105   DPAD_LEFT         WAKE_DROPPED
key 106   DPAD_RIGHT        WAKE_DROPPED
key 115   VOLUME_UP
key 114   VOLUME_DOWN
key 116   POWER             WAKE
key 212   CAMERA

key 16    Q
key 17    W
key 18    E
key 19    R
key 20    T
key 21    Y
key 22    U
key 23    I
key 24    O
key 25    P
key 26    LEFT_BRACKET
key 27    RIGHT_BRACKET
key 43    BACKSLASH

key 30    A
key 31    S
key 32    D
key 33    F
key 34    G
key 35    H
key 36    J
key 37    K
key 38    L
key 39    SEMICOLON
key 40    APOSTROPHE
key 14    DEL
        
key 44    Z
key 45    X
key 46    C
key 47    V
key 48    B
key 49    N
key 50    M
key 51    COMMA
key 52    PERIOD
key 53    SLASH
key 28    ENTER
        
key 56    ALT_LEFT
key 100   ALT_RIGHT
key 42    SHIFT_LEFT
key 54    SHIFT_RIGHT
key 15    TAB
key 57    SPACE
key 150   EXPLORER
key 155   ENVELOPE        

key 12    MINUS
key 13    EQUALS
key 215   AT



分享到:
评论

相关推荐

    android软键盘上添加一个按钮

    首先,理解Android软键盘的工作原理。软键盘是通过系统的InputMethodService服务实现的,它是一个抽象的服务类,用于创建自定义输入法。然而,系统默认的软键盘并不允许开发者直接在其上添加自定义元素。为了实现在...

    android监听软键盘状态

    综上所述,监听Android软键盘状态可以通过比较布局高度变化或观察`WindowInsets`来实现。开发者应根据实际需求选择合适的方法,并注意性能优化。以上代码示例仅供参考,实际使用时需根据项目具体情况进行调整。

    android 软键盘把界面顶起

    Android 软键盘调整界面问题解决方案 Android 软键盘的问题是 Android 开发中常见的问题之一。...通过了解软键盘的状态和调整方法,可以更好地解决软键盘相关问题,提高 Android 应用程序的用户体验。

    Android软键盘打开/关闭监听器

    在开发时遇到一个问题,需要对软...但是由于android不直接提供对软键盘打开与关闭操作的监听器,所以必须自己来写一个关于软键盘打开/关闭的监听器。 原理是通过对OnGlobalLayoutListener()来实现对软键盘的状态监听器

    Unity3D android 拉起android软键盘

    Unity3D android 拉起android软键盘 最近公司项目有一个手机VR展厅业务,用U3D做VR场景还可以做到,后面要加个2D的线下预定页面,就涉及到3D 2D界面转换,首先考虑u3d作为插件,不考虑升级客户端,更新U3D资源来升级...

    Android软键盘与聊天页面底部布局之间优雅地切换

    首先,我们需要理解Android软键盘对布局的影响。当用户点击输入框时,软键盘通常会覆盖屏幕底部的部分内容,这可能会遮挡聊天窗口的输入框或发送按钮。为了解决这个问题,Android提供了几种处理策略。 1. **调整...

    android软键盘上移动焦点

    本文将深入探讨如何在Android软键盘上实现焦点移动,并支持上下左右按键以及回车键输入,以拉丁IME(LatinIME)输入法为例。 首先,焦点移动的关键在于监听和处理键盘事件。为了实现在软键盘上移动焦点,需要重写`...

    Android判断软键盘是否弹出

    在Android开发中,有时我们需要检测应用中的软键盘是否弹出,以便进行相应的界面调整或功能控制。例如,当用户打开虚拟键盘时,我们可能需要自动调整输入框的位置,或者在键盘隐藏时恢复原来的布局。标题“Android...

    Android 实现软键盘与EditText的交互.zip

    综上所述,这个压缩包提供了关于Android软键盘与EditText交互的解决方案,包括如何控制键盘显示、布局调整、工具类库的使用等,对于优化用户体验具有重要的实践意义。开发者可以参考这些内容,根据自己的应用需求...

    android软键盘把布局顶上去问题

    另一种选择是`android:windowSoftInputMode="adjustResize"`,它会让整个布局缩小,以便为软键盘腾出空间,但可能会导致部分布局被键盘遮挡。 2. **自定义布局**: 创建一个自定义的全屏布局,监听键盘的显示与...

    android软键盘状态判断DEMO

    本DEMO——"android软键盘状态判断DEMO"提供了一个解决方案,它能判断软键盘的显示状态,并且对外提供了一个状态改变的接口,使得开发者可以方便地监听到软键盘的动态变化。 首先,软键盘状态的判断通常是通过观察...

    Android监听软键盘弹出和收起事件

    监听Android软键盘弹出和收起事件(所有代码都是抽离自facebook/react-native源码中, 亲测有效, 放心食用)。回调事件方法参数包含键盘是否弹出(isShow)、键盘高度(keyboardHeight)、屏幕可用高度(screenHeight)、屏幕...

    5种方法完美解决android软键盘挡住输入框方法详解

    在Android应用开发中,经常会遇到一个问题,即当用户在输入框中输入时,弹出的软键盘会遮挡部分屏幕内容,尤其是对于登录或注册等需要填写多项信息的界面,这种情况严重影响了用户体验。为了解决这个问题,Android...

    Android软键盘学习资料

    以下是对“Android软键盘学习资料”中涉及的知识点的详细解析: 1. **Android软键盘的显示与隐藏**: - 当用户在EditText输入时,系统会自动弹出软键盘。开发者可以通过`android:windowSoftInputMode`属性在...

    Android软键盘返回键监听.zip

    总之,监听Android软键盘的返回键事件是一项实用的功能,能够帮助开发者更好地控制用户在应用中的交互流程。无论是通过InputMethodManager,还是通过观察ViewTreeObserver,或者是自定义键盘事件,都有其适用的场景...

    Android 解决软键盘遮挡登陆按钮

    然而,当软键盘弹出时,布局不会自动适应键盘的高度,因此可能导致下方元素被遮挡。 解决软键盘遮挡登录按钮的方法主要有以下几种: 1. 使用`android:windowSoftInputMode="adjustResize"`: 在AndroidManifest....

    Android软键盘遮挡问题解决

    Android软键盘遮挡问题解决demo 在开发登录界面时,在点击某个EditText准备输入时,弹出的软键盘遮挡了按钮或者下面的输入框。在完成这个文本框的输入后,想要继续下面的操作,需要先隐藏软键盘。这会影响用户操作的...

    Android监听输入法软键盘按键demo

    通过重写`Activity`的`onWindowFocusChanged`方法,判断焦点变化是否与软键盘有关,然后结合`InputMethodManager`的`getInputMethodState()`等方法,分析按键事件。 ```java @Override public void ...

    Android 设置一个底部控件view随着软键盘的弹出而上移

    在Android开发中,当用户在应用中输入时,软键盘的弹出可能会遮挡底部的控件,导致用户体验下降。为了改善这种情况,开发者通常需要实现一个功能,使得底部的视图(如工具栏、按钮等)能够随着软键盘的弹出而上移。...

    android 监听软键盘状态(弹起还是收起)

    在Android开发中,有时我们需要监听软键盘的打开与关闭状态,比如在聊天界面或搜索框等场景下,以便做出相应的布局调整。虽然Android SDK并没有提供直接的API来监听软键盘的状态,但我们可以通过一些技巧来实现这个...

Global site tag (gtag.js) - Google Analytics