BasePopup自1.7.4之后开始支持自动适配输入法,经过不断的优化,现在输入法适配已经比较完善,本章将介绍输入法适配配置的相关信息。
- BasePopup根据Activity的SoftInputMode来监听键盘高度(decorView变化),如果您的Activity的SoftInputMode不是
adjustPan
或adjuResize
,键盘适配可能会失效。 | 【温馨提示】
为了规范化命名,自正式版3.1.5(快照版本3.1.7-SNAPSHOT)起键盘输入相关设置API将会从xxInputMethod修改为setKeyboardXX,xxInputMethod将会从3.2版本开始删除,3.2版本之前将会作废弃处理。 | | —- |
适配输入法
默认情况下,BasePopup不会适配输入法,如果您需要BasePopup适配输入法动态变化的话,请配置方法setKeyboardAdaptive(true)
,该方法决定BasePopup是否适配输入法。
示例
未适配输入法 | 适配输入法 |
---|---|
自动打开输入法
某些情况下可能需要在显示BasePopup的时候自动打开输入法,您只需要配置setAutoShowKeyboard(boolean autoShow)
或者setAutoShowKeyboard(EditText editText, boolean autoShow)
即可,其中如果指定EditText,效果会更好。
示例
输入法适配模式(2.2.2版本后提供)
从2.2.2版本开始,BasePopup支持配置输入法的适配模式,以满足不同的情况。
输入法的适配模式您可以通过以下表格中的方法进行设置:
方法 | 描述 |
---|---|
setKeyboardAdaptionMode(int) | 设置输入法适配模式 |
setKeyboardAdaptionMode(int viewId, int flag) | 设置输入法适配模式,目标为ContentView中指定viewId的View,键盘将会对齐该目标 |
setKeyboardAdaptionMode(View alignTarget, int flag) | 设置输入法适配模式,目标为ContentView中指定的View,键盘将会对齐该目标 |
可选的flag参数:
flag | 描述 |
---|---|
FLAG_KEYBOARD_ALIGN_TO_ROOT | 键盘适配对齐到整个ContentView【1】 |
FLAG_KEYBOARD_ALIGN_TO_VIEW | 键盘适配对齐到popup内指定的View/ViewId 【2】 |
FLAG_KEYBOARD_IGNORE_OVER | 键盘适配仅作用于无法完整显示的情况 |
FLAG_KEYBOARD_ANIMATE_ALIGN | 键盘是否执行动画适配 |
FLAG_KEYBOARD_FORCE_ADJUST | 强制适配输入法(横屏默认不适配输入法,设置该Flag则强制适配) |
flag的值可以通过位运算叠加在一起使用,如我希望对齐到ContentView并且执行动画适配,那么flag可以这么传入:FLAG_KEYBOARD_ALIGN_TO_ROOT | FLAG_KEYBOARD_ANIMATE_ALIGN
【1】 FLAG_KEYBOARD_ALIGN_TO_ROOT优先级比FLAG_KEYBOARD_ALIGN_TO_VIEW高,如果同时存在两者,则处理FLAG_KEYBOARD_ALIGN_TO_ROOT。 |
---|
【2】 如果搭配使用FLAG_KEYBOARD_ALIGN_TO_VIEW,您需要传入View或者ViewId。 - View可以是任意的View,包括非ContentView内的(实际上传入ContentView外的View没有任何意义)。一般这种模式可以用于对齐ContentView中的列表中某个Item或某个View - ViewId必须是ContentView中的View,内部会根据该Id去ContentView中进行FindView操作 - View的优先级比ViewId高,如果两者都传值了则会处理View |
---|
示例
FLAG_KEYBOARD_ALIGN_TO_ROOT | FLAG_KEYBOARD_ANIMATE_ALIGN | FLAG_KEYBOARD_ALIGN_TO_VIEW | FLAG_KEYBOARD_ANIMATE_ALIGN |
---|---|
指定id为EditTextView |
FLAG_KEYBOARD_IGNORE_OVER | FLAG_KEYBOARD_ANIMATE_ALIGN | FLAG_KEYBOARD_ANIMATE_ALIGN |
---|---|
/ | FLAG_KEYBOARD_ANIMATE_ALIGN |
---|---|
设置键盘监听
您可以通过设置setOnKeyboardChangeListener
来监听键盘的弹出和关闭。
- 键盘监听器回调方法
onKeyboardChange(Rect keyboardBounds, boolean isVisible)
将会回调两个参数:- keyboardBounds:键盘的显示矩形,其top表示键盘的顶部,而非DecorView顶部
- isVisible:键盘是否可见(是否弹出)
设置键盘弹出延时
为了保证键盘能正确弹出,默认情况下键盘会延迟350ms弹出,如果您觉得时间过长或过短,您可以通过setShowKeybaordDelay()
进行设置。弹窗时不收起键盘
默认情况下,弹窗会收起键盘,如果您希望弹窗时不要收起键盘,您可以通过hideKeyboardOnShow(boolean)
进行设置,缺省值为True。手动更新键盘对齐
您可以通过调用updateKeyboardAlign()
通知BasePopup重新按照您的键盘设置策略进行对齐,通常在一个列表中切换不同的输入框时会使用该方法。示例
设置输入法弹出后BasePopup的位置(3.1.5版本后提供)
跟BasePopup定位一样,您可以通过Gravity和offsetX、offsetY对输入法弹出后BasePopup在剩余空间内的定位。
issue:#426
方法 | 描述 |
---|---|
setKeyboardGravity(int) | 设置输入法弹出后BasePopup在剩余空间内的定位。 - 类似于无AnchorView的BasePopup定位 |
setKeyboardOffsetX(int viewId, int flag) | 设置输入法弹出后BasePopup在剩余空间内的水平位移。 |
setKeyboardOffsetY(View alignTarget, int flag) | 设置输入法弹出后BasePopup在剩余空间内的垂直位移。 |
【温馨提示】 除了FLAG_KEYBOARD_IGNORE_OVER外,输入法适配模式一样适用于本设置,例如设置了FLAG_KEYBOARD_ANIMATE_ALIGN,那么BasePopup在键盘弹出后有位移动画,没设置的情况下直接设置位置。 |
---|