软键盘弹出和隐藏
弹出软键盘:
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(editText, 0);
隐藏软键盘:
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(editText, 0);
软键盘无法弹出问题
有时候为了优化用户使用体验,希望一进入到界面,就自动弹出软键盘,但是 showSoftInput() 返回的却是 false,弹出软键盘失败。
一般是页面还没加载成功,editText还未获取到焦点,所以弹出软键盘失败。可以延迟弹出,例如:
editText.requestFocus();
//延迟执行,界面需要初始化完成才可以打开软键盘
editText.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(editText, 0);
}
}, 300);
点击页面空白地方关闭软键盘
所有view都注册 OnTouchListener 事件,点击时校验,如果不是 EditText 就关闭软键盘。
public void registerHideKeyboard(View view){
if (!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent arg1) {
InputMethodManager im = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(v.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
return false;
}
});
}
if (view instanceof ViewGroup) {
for(int i = 0; i < ((ViewGroup) view).getChildCount(); i++){
View innerView = ((ViewGroup) view).getChildAt(i);
registerHideKeyboard(innerView);
}
}
}
网友评论