Android软键盘模式

软键盘模式(WindowManager.LayoutParams)

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

转载于:https://juejin.im/post/5cd388fe6fb9a032484d7ee0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值