版权声明:本文为博主原创文章,未经博主允许不得转载。
在我们开发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。经测试,能解决很多系统输入框不能消失的问题。
网友评论