Android开发中,对键盘的控制是家常便饭。我们一般通过两种方式控制键盘的行为,一种是在Activity中配置相关属性,另一种是直接调用系统提供的方法。
AndroidManifest中配置
AndroidManifest文件的Activity中有一个名为android:windowSoftInputMode的属性,通过配置该属性可以实现对软键盘行为的一些控制。这个属性有有以下可配置的值
stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
stateHidden:用户选择activity时,软键盘总是被隐藏
stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
stateVisible:软键盘通常是可见的
stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
stateAlwaysVisible与stateVisible属性看上去是一样的效果,其实有小小的不同之处。举个例子,当我们设置为stateVisible属性,如果当前的界面键盘是显示的,当我们点击按钮跳转到下个界面的时候,软键盘会因为输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。但是如果我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,但是当我们再次回来的时候,软键盘是会显示出来的。所以,这个Always就解释了这个区别,不管什么情况到达当前界面(正常跳转或者是上一个界面被用户返回),软键盘都是显示状态。
stateAlwaysHidden和stateHidden不知道是不是也是一样的区别,没有验证。知道的同学还望赐教。
一般来说,在给它设置值的时候都是一个stateXXX + 一个adjustXXX,值之间用|分割开。用的比较多的还是"stateHidden|adjustResize"和"stateHidden|adjustPan"这两对组合。
"adjustResize"在使用时布局会被软键盘顶上去,体验非常不好
"adjustPan"在使用时获取焦点的控件下边的View将会被软键盘覆盖
不知道各位在开发中有没有遇到需要监听软键盘弹出或隐藏的