关于windowSoftInputMode

android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"]


如上,windowSoftInputMode有六个stateXXX的值和三个adjustXXX的值。简单地说,state前缀的值控制软件输入法在Activity成为用户焦点时的可见性,adjust前缀控制其在窗口的显示方式。
两种值可组合使用。
可见性由两种:隐藏和显示
显示方式有两种:弹出软窗时,要么缩小内容部分,要么调整内容的位置,使其焦点控件处理可见窗口内。

每个值的意义,如下表(官方)
说明
"stateUnspecified" 不指定软键盘的状态(隐藏还是可见)。 将由系统选择合适的状态,或依赖主题中的设置。

这是对软键盘行为的默认设置。

stateUnchanged 当 Activity 转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。
stateHidden 当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 隐藏软键盘。
stateAlwaysHidden 当 Activity 的主窗口有输入焦点时始终隐藏软键盘。
stateVisible 在正常的适宜情况下(当用户向前导航到 Activity 的主窗口时)显示软键盘。
stateAlwaysVisible 当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 显示软键盘。
adjustUnspecified 不指定 Activity 的主窗口是否调整尺寸以为软键盘腾出空间,或者窗口内容是否进行平移以在屏幕上显露当前焦点。 系统会根据窗口的内容是否存在任何可滚动其内容的布局视图来自动选择其中一种模式。 如果存在这样的视图,窗口将进行尺寸调整,前提是可通过滚动在较小区域内看到窗口的所有内容。

这是对主窗口行为的默认设置。

adjustResize 始终调整 Activity 主窗口的尺寸来为屏幕上的软键盘腾出空间。
adjustPan 不调整 Activity 主窗口的尺寸来为软键盘腾出空间, 而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。 这通常不如尺寸调正可取,因为用户可能需要关闭软键盘以到达被遮盖的窗口部分或与这些部分进行交互。

 

除了在清单中指定,还可用代码手动显示(但不可用代码隐藏)

 

public void showSoftKeyboard(View view) {
    if (view.requestFocus()) {
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
    }
}

 

关于关闭软键盘的一些问题,可参考该链接
https://stackoverflow.com/questions/1109022/close-hide-the-android-soft-keyboard
posted on 2018-12-17 16:57  吃蛋挞  阅读(495)  评论(0编辑  收藏  举报