需求 1:软键盘弹出,同时不顶起整体布局
解决:
android:windowSoftInputMode="stateHidden|adjustResize"
或者
android:windowSoftInputMode="adjustPan"
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
需求 2:软键盘弹出,顶起当前的布局,但不需要整体上移!
解决:
android:windowSoftInputMode="adjustPan|stateAlwaysHidden"
windowSoftInputMode 类型介绍:
“stateUnspecified”
未指定软键盘的状态,系统将自动选择一个合适的状态或依赖于主题中的设置,这是默认的设置
“stateUnchanged”
当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
“stateHidden”
用户选择activity时,软键盘总是被隐藏
“stateAlwaysHidden”
当该Activity主窗口获取焦点时,软键盘也总是隐藏的
“stateVisible”
软键盘通常是可见的
“stateAlwaysVisible”
用户选择activity时,软键盘总是显示的状态
“adjustUnspecified”
默认设置,通常由系统自行决定是隐藏还是显示
“adjustResize”
该Activity总是调整屏幕的大小以便留出软键盘的空间
“adjustPan”
当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
一般来说,用的比较多的还是”stateHidden|adjustResize”和”stateHidden|adjustPan”这两对组合。
“adjustResize”在使用时布局会被软键盘顶上去,体验非常不好
“adjustPan”在使用时获取焦点的控件下边的View将会被软键盘覆盖
扩展知识(显示、隐藏):
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// 获取软键盘的显示状态
boolean isOpen=imm.isActive();
// 如果软键盘已经显示,则隐藏,反之则显示
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
// 隐藏软键盘
imm.hideSoftInputFromWindow(view, InputMethodManager.HIDE_NOT_ALWAYS);
// 强制显示软键盘
imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);
// 强制隐藏软键盘
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);