Android:windowSoftInputMode属性详解

windowSoftInputMode属性主要是说明activity界面的主窗口和屏幕内软键盘窗口如何交互的,设置这个属性会影响两件事:

1.软键盘的状态-当activity获得焦点时,软键盘是隐藏状态还是可见状态

2.对activity主窗口的调整-是否调整activity主窗口的大小来为软键盘预留空间,是否当activity主窗口的部分内容被软键盘遮盖时它的内容焦点是可见的

设置的值必须是下列列表中的值的一个,或者是一个”state…”和一个”adjust…”的组合,但是在任一组中设置多个值-如在一组中设置了多个”state…”会得到未知结果,各个值之间用竖线(|)隔开,例如:

    <activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >


state...属性

"stateUnspecified":软键盘的状态(是否隐藏或可见)没有指定。该系统将选择一个合适的状态或  依靠theme中的设置,这个是默认设置。

"stateUnchanged":当activity来到栈顶时,软键盘可见或隐藏和前一个activity软键盘的状态保持一致并且不变。

"stateHidden":当用户选择到该activity时,软键盘是隐藏的-也就是说,当用户确实导航到该activity时,而不是因为离开另一个activity退回到该activity的时候。

"stateAlwaysHidden":软键盘总是隐藏的(即使activity有输入焦点)

"stateVisible":通常适当情况下软键盘是可见的(当用户导航到该activity的主窗口时)

"stateAlwaysVisible":当用户选择到该activity的时候软键盘是可见的-也就是说,用户确实是导航到该activity的时候,而不是因为离开另一个activity才返回到该activity的时候。

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

adjust...属性

"adjustUnspecified":这个设置没有指明是否减小activity主窗口的大小来为软键盘预留空间,或者是否当activity主窗口的部分内容被软键盘遮盖时它的内容焦点是可见的。系统会选择其中的一种模式:根据窗口内容里是否有可以滑动内容的布局view,如果有这样的一个view,activity的窗口将会调整大小,假设滚动可以显示所有窗口的内容在一个更小的区域。

"adjustResize":activity的主窗口总是调整大小来为软键盘预留空间

"adjustPan":activity的主窗口并不会调整大小来为软键盘预留空间,相反,当前窗口的内容将会自动移动以便当前焦点从不被软键盘遮盖,用户能总是看到输入内容的部分。adjustPan相比于adjustResize通常用的少点,因为用户可能必须关闭软键盘才能和窗口中被遮挡的部分交互。

推荐阅读更多精彩内容