BasePopup自1.7.4之后开始支持自动适配输入法,经过不断的优化,现在输入法适配已经比较完善,本章将介绍输入法适配配置的相关信息。

  • BasePopup根据Activity的SoftInputMode来监听键盘高度(decorView变化),如果您的Activity的SoftInputMode不是 adjustPanadjuResize ,键盘适配可能会失效。 | 【温馨提示】
    为了规范化命名,自正式版3.1.5(快照版本3.1.7-SNAPSHOT)起键盘输入相关设置API将会从xxInputMethod修改为setKeyboardXXxxInputMethod将会从3.2版本开始删除,3.2版本之前将会作废弃处理。 | | —- |

适配输入法

默认情况下,BasePopup不会适配输入法,如果您需要BasePopup适配输入法动态变化的话,请配置方法setKeyboardAdaptive(true),该方法决定BasePopup是否适配输入法。

示例

未适配输入法 适配输入法
input_adjust_nothing.gif input_adjust.gif

自动打开输入法

某些情况下可能需要在显示BasePopup的时候自动打开输入法,您只需要配置setAutoShowKeyboard(boolean autoShow)或者setAutoShowKeyboard(EditText editText, boolean autoShow)即可,其中如果指定EditText,效果会更好。

示例

auto_show_input.gif

输入法适配模式(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


alignroot.gif
指定id为EditTextView
alignview.gif
FLAG_KEYBOARD_IGNORE_OVER | FLAG_KEYBOARD_ANIMATE_ALIGN FLAG_KEYBOARD_ANIMATE_ALIGN
ignore.gif full.gif
/ FLAG_KEYBOARD_ANIMATE_ALIGN
noanima.gif animate.gif

设置键盘监听

您可以通过设置setOnKeyboardChangeListener来监听键盘的弹出和关闭。

  • 键盘监听器回调方法onKeyboardChange(Rect keyboardBounds, boolean isVisible)将会回调两个参数:
    • keyboardBounds:键盘的显示矩形,其top表示键盘的顶部,而非DecorView顶部
    • isVisible:键盘是否可见(是否弹出)

      设置键盘弹出延时

      为了保证键盘能正确弹出,默认情况下键盘会延迟350ms弹出,如果您觉得时间过长或过短,您可以通过setShowKeybaordDelay()进行设置。

      弹窗时不收起键盘

      默认情况下,弹窗会收起键盘,如果您希望弹窗时不要收起键盘,您可以通过hideKeyboardOnShow(boolean)进行设置,缺省值为True。

      手动更新键盘对齐

      您可以通过调用updateKeyboardAlign()通知BasePopup重新按照您的键盘设置策略进行对齐,通常在一个列表中切换不同的输入框时会使用该方法。

      示例

      ezgif-2-a86adc678e98.gif

      设置输入法弹出后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在键盘弹出后有位移动画,没设置的情况下直接设置位置。

示例

ezgif-6-59b99ca2fbee.gif