首先,我们从这个属性的名称中,可以很直观的看出它的作用,这个属性就是来设置窗口软键盘的交互模式的。
android:windowSoftInputMode属性1共有9个取值,分别是:
stateUnspecified,stateUnchanged,stateHidden,stateAlwaysHidden,stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize,adjustPan。
我们设置属性的时候,可以在这9个值里面选择1个,也能够用"state...|adjust"的情势进行设置。那末,这些取值究竟是怎样影响到软键盘与窗口之间的交互的呢?下面,我们就1个个的测试这9个取值,究竟是如何影响软键盘的显示的。
1.stateUnspecified
中文意思是未指定状态,当我们没有设置android:windowSoftInputMode属性的时候,软件默许采取的就是这类交互方式,系统会根据界面采取相应的软键盘的显示模式,比如,当界面上只有文本和按钮的时候,软键盘就不会自动弹出,由于没有输入的必要。那末,当界面上出现了获得了焦点的输入框的时候,软键盘会不会自动的弹出呢?这个还真不1定!软键盘其实不会自动弹出。默许的,系统其实不肯定用户是不是需要软键盘,因此不会自动弹出。但是,为何说不1定呢?这是由于,如果我们在这个布局的外面,包裹上1个ScrollView,软键盘就会自动的弹出来了!
这确切是1个很奇怪的判断方式。因此,我们可以得出结论,当设置属性为stateUnspecified的时候,系统是默许不弹出软键盘的,但是当有取得焦点的输入框的界面有转动的需求的时候,会自动弹出软键盘。至于为何非要强调要获得焦点的输入框,这是由于,如果不是输入框获得焦点,软键盘也是不会自动弹出的,让界面不自动弹出软键盘的其中1个解决方案,就是在xml文件中,设置1个非输入框控件获得焦点,从而禁止键盘弹出。
2.stateUnchanged
中文的意思就是状态不改变的意思,我们应当怎样理解这句话呢?其实很好理解,就是说,当前界面的软键盘状态,取决于上1个界面的软键盘状态。举个例子,假设当前界面键盘是隐藏的,那末跳转以后的界面,软键盘也是隐藏的;如果当前界面是显示的,那末跳转以后的界面,软键盘也是显示状态。
3.stateHidden
当用户转到1个activity时,软键盘被隐藏。
当用户选择该Activity时,软键盘被隐藏――也就是,当用户肯定导航到该Activity时,而不是返回到它由于离开另外一个Activity。
4.stateAlwaysHidden
当1个activity中取得输入焦点时软键盘也被隐藏。
5.stateVisible
设置为这个属性,可以将软键盘召唤出来,即便在界面上没有输入框的情况下也能够强迫召唤出来。
软键盘总是被隐藏的,当该Activity主窗口获得焦点时。
6.stateAlwaysVisible
这个属性也是可以将键盘召唤出来,但是与stateVisible属性有小小的不同的地方。举个例子,当我们设置为stateVisible属性,如果当前的界面键盘是显示的,当我们点击按钮跳转到下个界面的时候,软键盘会由于输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。但是如果我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,但是当我们再次回来的时候,软键盘是会显示出来的。所以,这个Always就解释了这个区分,不管甚么情况到达当前界面(正常跳转或是上1个界面被用户返回),软键盘都是显示状态。
说到这里,我联想到了上面的stateHidden和stateAlwaysHidden,我估计区分也是这样的,就是说,stateAlwaysHidden不管如何都是隐藏的,但是如果在跳转到下个界面的时候,软键盘被召唤出来了,那末当下个界面被用户返回的时候,键盘应当是不会被隐藏的,但是,我还没有找到能够跳转到下个界面,还让当前界面软键盘不消失的方法,所以暂时不能验证。
7:"adjustUnspecified
"
不指定界面是不是调剂大小以适应软键盘和输入内容显示在界面上的位置,由系统默许决定。
8:"adjustResize
"
activity总是自动调剂空间大小以适应软键盘(留出空间)。
9:"adjustPan
"
当前activity界面自动移动使用户输入的内容不被覆盖。