Android 系统键盘怎么也不消失

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

在我们开发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 系统键盘怎么也不消失)