关于Android软键盘的那些事
一软键盘自动弹出和关闭
- 软键盘的自动弹出
虽然上述代码可以使得软键盘自动弹出,但是对于界面比较复杂的情况的时候,软键盘可能无法正常的弹出,需要延迟加载,即在界面加载完成之后弹出软键盘。
延迟加载可以使用Handler或者定时器schedule来实现。 - 软键盘的关闭
关闭软键盘的代码如下:
二、进入Activity自动弹出软键盘
为了实现进入某个包含了EditText控件Activity的时候,能够自动的弹出软键盘的需求,可以在AndroidManifest.xml文件中,在对应的Activity的属性中进行如下设置android:windowSoftInputMode = “stateVisible”。
具体例子如下:
三、自定义Dialog弹出软键盘问题
自定义一个Dialog的时候,若该Dialog包含了一个EditText控件,并且要求当弹出该Dialog时,自动弹出软键盘。
对于这个问题,即使EditText获取到了焦点并且使用了一中自动弹出软键盘的代码,依旧无法解决,一个有效的解决方案如下:
四、软键盘把某些布局挤上去的问题
Activity中有一个关于软键盘的属性为windowSoftInputMode,其中2个比较重要的是adjustPan和adjustResize。
adjustPan不会把底部的布局给挤上去,例如RelateLayout布局中放到bottom的布局。
adjustResize是自适应,会把底部的挤上去。
因此设置Activity的windowSoftInputMode属性为adjustPan,即可解决软键盘把底部布局给挤上去的问题:
五、软键盘显示调整(windowSoftInputMode)
在Android中,可以通过给Activity设置windowSoftInputMode这个属性来控制软键盘与Activity的主窗口的交互方式。Activity的主窗口与包含屏幕软键盘的窗口的交互方式,该属性的设置影响两个方面:
当Activity成为用户注意的焦点时软键盘的状态——可见还是隐藏
对Activity主窗口所做的调整——是否将其尺寸调小为软键盘腾出空间,或者当窗口部分被软键盘遮挡时是否平移其内容以使当前焦点可见。
- 控制软键盘显示还是隐藏
stateUnspecified——不指定软键盘的状态(可见还是隐藏) 将由系统选择合适的状态,或者依赖主题中的设置,这是对软键盘行为的默认设置。
stateUnchanged——保留状态 当Activity转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。
stateHidden——隐藏软键盘 当用户确实是当前导航到Activity,而不是因离开另一Activity而返回时隐藏软键盘。
stateAlwaysHidden——始终隐藏软键盘 当Activity的主窗口由输入焦点时始终隐藏软键盘。
stateVisible——显示软键盘 在正常的适宜情况下(当用户当前导航到Activity的主窗口时)显示软键盘。
stateAlwaysVisible——显示软键盘 当用户确实是当前导航到Activity,而不是因离开另一Activity而返回时。 - 在软键盘弹出时,是否需要Activity对此进行调整
adjustUnspecified 主窗口的默认行为,不指定Activity的主窗口是否调整尺寸以为软键盘腾出空间,或者窗口内容是否进行平移以在屏幕上显示当前焦点。系统会根据窗口的内容是否存在任何可滚动其内容的布局视图来自动选择其中一种模式。如果存在这样的视图,窗口将进行尺寸调整,前提是可通过滚动在较小区域看到窗口的所有内容。
adjectResize 始终调整Activity主窗口的尺寸来为屏幕上的软键盘腾出空间。
adjustPan 不调整Activity主窗口的尺寸来为软键盘腾出空间,而是自动平移窗口的内容,使得当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。
adjustNoting 软键盘弹出时,主窗口Activity不会做出任何响应。
(更多的问题,待日后更新)