软键盘模式(WindowManager.LayoutParams)
- 首先要分清是前进还是后退 假设有A、B、C三个页面,A启动B,表示前进,C返回B表示后退,并且下面的软键盘显示与否与当前页面中是否有输入框无关,比如设置了SOFT_INPUT_STATE_VISIBLE则进入该Activity就会弹出软键盘无论该页面中是否有输入框
- 下面是几种页面切换时软键盘显示与否的模式,如果输入框本身就显示在软键盘上面,那么几种模式都一样,软键盘显示不会改变Activity的任何视图,下面讲述的是当软键盘弹起会遮挡输入框的情形
- SOFT_INPUT_STATE_UNSPECIFIED 默认模式,系统会根据界面采取相应的软键盘的显示模式
- SOFT_INPUT_STATE_UNCHANGED 当这个Activity出现时,软键盘将一直保持在上一个Activity里的状态,无论是后退还是前进
- SOFT_INPUT_STATE_HIDDEN 前进到设置该模式的Activity时如果键盘已经显示会隐藏键盘,回退到该Activity则软键盘是否显示保持不变
- SOFT_INPUT_STATE_ALWAYS_HIDDEN 前进或后退到该Activity如果软键盘已经显示都会关闭
- SOFT_INPUT_STATE_VISIBLE 当前进到设置该模式的Activity时会显示软键盘,回退到该Activity则软键盘是否显示保持不变
- SOFT_INPUT_STATE_ALWAYS_VISIBLE 当前进或后退到该Activity如果软键盘已经消失会显示
- 下面是几种当软键盘弹出时是否需要调整Activity的视图
- SOFT_INPUT_ADJUST_UNSPECIFIED 未指定模式系统将根据情况使用下面的几种模式
- SOFT_INPUT_ADJUST_RESIZE 如果当前Activity有focus的输入框那么进入时就会弹出软键盘,并且当软键盘显示时会缩小ContentView(id 为 android.R.id.content)的高度,用以显示软键盘,注意该属性不能与SOFT_INPUT_ADJUST_PAN一起使用
- SOFT_INPUT_ADJUST_PAN 如果当前Activity有focus的输入框进入时不会弹出软键盘,并且当软键盘显示时会把整个ContentView向上移动一段距离直到输入框能够显示出来(可能会出现短暂的底部黑屏),注意该属性不能与SOFT_INPUT_ADJUST_PAN一起使用
- SOFT_INPUT_ADJUST_NOTHING 当软键盘显示时不缩小ContentView的高度,也不移动ContentView,可能会导致输入框不可见
- 上述几个Mode作用于滚动视图也是如此,设置成SOFT_INPUT_ADJUST_NOTHING,还是不改变Activity的视图只是弹出一个输入框。设置成SOFT_INPUT_ADJUST_RESIZE,则会减少ContentView的高度,滚动视图会向上滚动,直到Focus的输入框显示在输入框上面,进入Activity时如果有输入框Focus也会自动弹出软键盘。设置成SOFT_INPUT_ADJUST_PAN,可能会导致滚动视图的上边的Item不可见因为滚动视图向上移动出了屏幕。
Tip
- 想要弹出PopupWindow的时候隐藏软键盘可以设置以下代码
window.setFocusable(true);
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
复制代码
- 弹出的PopupWindow直接覆盖在软键盘上面
window.setFocusable(true);
window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
复制代码
转载于:https://juejin.im/post/5cd388fe6fb9a032484d7ee0