最近一直在做搜索页面,为了提高用户的体验,需要自动弹出和关闭软键盘。本以为是件简单的事,结果网上的东西尽是些有问题的,要么就是弹不出,要么就是第一次可以弹出,但第二次就弹不出了。经过本人的多次实验,终于整理出了弹出和关闭软键盘的较好的方法。
1.弹出软键盘
//获取焦点,只有这样才有效
mViewDataBinding.editSearchContent.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
这两句代码可以直接弹出软键盘,但是第二次调用时就没有作用了。如果使用网上说的showSoftInput方法的话,是需要在View完成了绘制后才会有效。
//这里需要延迟请求,但是不知道为什么,即使我延迟请求了也没用,郁闷。
InputMethodManager inputManager =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mViewDataBinding.editSearchContent, 0);
所以结合两种方法的特点,如果我们需要在Activity开始时就显示软键盘,则可以第一次时使用第一种方法,以后需要显示的化就使用第二次的方法,即:
//判断是否是第一次请求
if (isFirst) {
//获取焦点,否则请求无效
mViewDataBinding.editSearchContent.requestFocus();
//设置当获得焦点时弹出软键盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
isFirst = false;
} else {
mViewDataBinding.editSearchContent.requestFocus();
//以后的请求直接调用showSoftInput方法就行了
InputMethodManager inputManager =
(InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mViewDataBinding.editSearchContent, 0);
//移动光标到EditText的最后
mViewDataBinding.editSearchContent.setSelection(mViewDataBinding.editSearchContent.getText().length());
}
}
这样的就能完美的控制软键盘的显示了。
2.关闭软键盘
关闭软键盘就没有那么多坑了直接用网上比较常用的就行了。
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
}