android:windowsoftinputmode属性,state…值表示软键盘显示与隐藏,adjust…值表示软键盘与App显示内容之间的位置关系。在设置此属性时,可以从给定的选项值中选取一个,也可以用”state…|adjust…”的形式进行设置。
stateUnspecified
未指定状态,当没有设置windowsoftinputmode属性时,软件默认采用的就是这种交互模式,系统会根据界面采取相应的软键盘的显示模式。比如,当界面上只有文本和按钮的时候,软键盘就不会自动弹出,因为没有输入的必要,但当界面上出现了获取了焦点的输入框的时候,软键盘也不一定自动弹出!
当设置属性为stateUnspecified的时候,系统默认是不弹出软键盘的,但当有获得焦点的输入框的界面有滚动的需求的时候,会自动弹出软键盘。软件盘会覆盖内容,如下:
stateUnchanged
当前界面的软键盘的状态取决于上一个界面的软键盘状态。比如当前界面键盘是隐藏的,那么跳转之后的界面软键盘也是隐藏的;如果当前界面是显示的,那么跳转之后的界面软键盘也是显示状态。当软键盘显示时,同上,跳转后覆盖内容。
stateHidden
如果设置这个属性,那么键盘状态是隐藏的,不管上一个界面时什么状态,也不管当前界面有没有输入要求,反正就是不显示。可以通过设置这个属性来控制软键盘不自动弹出,但点击文本框进行输入时,键盘同上会覆盖内容。
stateAlwaysHidden
当该activity页面获取焦点时,软键盘总是隐藏的。
(在网上查stateAlwaysHidden属性和stateHidden属性区别,如下截图,意思是如果activity属性设置为stateHidden,但当按返回键返回到此activity时,软键盘应该显示,但在按返回键时,软键盘自己先收起来再调回到原页面,无法验证,所以,区别到底在哪???)
stateVisible
设置这个属性可以把软键盘强制召唤出来,即使这个界面没有输入框的情况下也可以强制把软键盘召唤出来。键盘会覆盖内容。
stateAlwaysVisible
这个属性也是可以把软键盘强制召唤出来,但和上面的属性有一点不同。当设置stateVisible属性时,如果当前页面的键盘是显示的,当点击跳转到下一个界面的时候,软键盘会因为输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘是隐藏的。但当设置属性为stateAlwaysVisible时,跳转到下一个界面后键盘还是隐藏的,但当再次回来的时候,软键盘是会显示出来的。Always的意思是不管什么情况到达当前界面(正常跳转或者是上一个界面返回),软键盘都是显示的。
adjustUnspecified
此选项是默认的设置模式,在这种情况下,系统会根据界面所包含控件的不同调整软键盘的位置。
当界面中没有滚动控件时,软键盘弹出时会将标题栏顶上去,输入的内容用户是可以看见的,如同设置adjustPan属性,如下图:
当有滚动控件时,标题栏不动,不会被顶上去,但可滚动区域中的内容会上划,将用户选择的输入区域显示在用户视野范围内,并可以滑动到滑动区域内的所有控件,如同设置adjustResize属性,但和adjustResize不同的是,设置默认属性时,当软键盘弹出时,滑动控件的可滑动范围是不受影响的,但设置adjustResize属性时,当软键盘弹出时,滑动控件的可滑动范围受到了影响,不能获取到整个可滑动范围;
当滑动区域上方有多个控件时,软键盘弹出后会将位于下方的滑动区域遮挡。
adjustResize
标题栏不被顶出去
有滚动控件时,会压缩滚动控件来保证输入框刚好能输入;没有滚动控件时,不保证正好能输入,软键盘只管自己顶上来,盖到谁算谁,而且无论界面有没有滚动控件,都将压缩父类布局,如设置背景图,背景图会被压缩,键盘会自动弹出。
adjustPan
标题栏被顶出去
如果输入框高于键盘弹出的高度,则不会对界面造成任何影响,也不会压缩背景图片,如果输入框低于键盘弹出高度,不管有没有滚动控件,不会压缩任何界面,而是会把整个界面往上顶,键盘不会自动弹出。
adjustNothing
不做任何事情,不管有没有滚动控件,能不能正确输入,什么都不做,键盘不自动弹出。
网友评论