Android 系统键盘怎么也不消失

作者: BRYANB | 来源:发表于2018-08-06 21:54 被阅读9次

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    在我们开发EditText的时候,会经常和系统输入框打交道,各种系统输入框的显示和隐藏的控制。常常也碰到各种显示不了,隐藏不了的问题。最近碰到一个系统输入框一直显示不了的问题。
    问题:自定义密码输入框显示后,系统输入框需要显示,密码输入完毕后系统输入框需要消失,这个时候,不管怎么样都消失不了。
    上网找了很多解决方案,对于我这个情况都没有效果。稍微总结下:
    1

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
    

    2

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(view,InputMethodManager.SHOW_FORCED); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘
    

    3
    将EditText的父级控设置成:
    Android:focusable=”true”
    android:focusableInTouchMode=”true”

    4
    在AndroidManifest.xml中的application中添加如下第一行代码
    android:windowSoftInputMode=”adjustPan|stateHidden”

    5

    if (getWindow().getAttributes().softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) {
                if (getCurrentFocus() != null)
                    inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                            InputMethodManager.HIDE_NOT_ALWAYS);
            }
    

    .......等等诸如此类的方法对于一般的情况是有效果的。但是对于我的这个情况,不管是在onDestroy()方法里还是在输入框需要消失的时候去调这些方法都是没有用。后来我想到了会不会是焦点的问题,输入框不消失肯定是有某个控件或者view获得了焦点,于是,想到了如下的解决方案。

    v.requestFocus();
                            if (v != null) {
                                IBinder token = v.getWindowToken();
                                if (token != null) {
                                    InputMethodManager im = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                                    im.hideSoftInputFromWindow(token, 0);
                                }
                            }
    

    其中的v可以是任意需要获取焦点的view。经测试,能解决很多系统输入框不能消失的问题。

    相关文章

      网友评论

        本文标题:Android 系统键盘怎么也不消失

        本文链接:https://www.haomeiwen.com/subject/isxyvftx.html