软件盘会影响我们之前写好的界面,而且在界面fragment切换时或者activity 切换时已弹起的软键盘不会关闭,我们需要自己手动的关闭软键盘。
1、首先我们需要新建一个工具类,管理软键盘的开关
直接上代码:
public class ImmSolftManager {
private Activity activity;
InputMethodManager imm;
public ImmSolftManager(Activity activity){
this.activity = activity;
imm = (InputMethodManager)
activity.getSystemService(Context.INPUT_METHOD_SERVICE);
}
public void showKeyboard(boolean isShow) {
//当前获取到焦点的view
View currentFocus = activity.getCurrentFocus();
if (null == imm)
return;
if (isShow) {
if (currentFocus != null) {
//有焦点打开
imm.showSoftInput(currentFocus, 0);
} else {
//无焦点打开
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
} else {
if (currentFocus != null) {
//有焦点关闭
imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} else {
//无焦点关闭
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
}
}
}
2、我们只需要在需要的地方调用就行了。
3、注意事项,不要在activity 刚创建就调用,最后在界面切换、按钮点击等事件中响应
若不想activity 刚创建就弹出软键盘可以在注册activity时使用:
android:windowSoftInputMode=”stateAlwaysHidden|adjustPan”
这两天在项目中使用这个方法,发现还有一些小的bug,很烦,最后给出一种解决方案
private void hideSoftInputFromWindow() {
if (sv != null) {
sv.clearFocus();
if (imm != null) {
imm.hideSoftInputFromWindow(sv.getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
这里的sv是我的searchview,其它地方可以改成对应的edittext即可。多个输入框的暂时还没测试