当软键盘显示时,窗口会调整大小,以便为软键盘腾出空间。通常意味着窗口的内容会向上移动,以便为键盘腾出空间。DecorView大小不会改变,内容区contentView(id = android.R.content)会相应的缩小为键盘腾出空间。
windowSoftInputMode是 Android 中的一个属性,定义了当屏幕上有焦点且需要显示软键盘(即屏幕键盘)时,活动(Activity)窗口应该如何调整。属性位于AndroidManifest.xml文件中,针对每个<activity>标签进行设置。
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
</activity>
windowSoftInputMode有多个可能的值,可以分为两类:state前缀的值和adjust前缀的值。
- 「state 前缀的值」:
stateUnspecified:软键盘的默认状态由系统决定。
stateUnchanged:软键盘将保持上一次的状态,无论是可见还是隐藏。
stateHidden:当 Activity 被创建时,软键盘是隐藏的。
stateAlwaysHidden:软键盘总是隐藏的,即使用户选择了一个需要输入文本的字段。
stateVisible:当 Activity 被创建时,软键盘是可见的。
stateAlwaysVisible:软键盘总是可见的。
- 「adjust 前缀的值」:
-
adjustUnspecified:默认调整方式。系统的选择取决于屏幕大小和窗口是否可调整大小。
-
adjustResize:当软键盘显示时,窗口会调整大小,以便为软键盘腾出空间。这通常意味着窗口的内容会向上移动,以便为键盘腾出空间。
-
adjustPan:窗口内容不会调整大小,而是向上平移,以便当前获得焦点的字段不被键盘遮挡。
在AndroidManifest.xml设置:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
</activity>
在代码中设置:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
}
这些值可以通过 "|" 符号分隔进行组合,在上面的代码中,stateHidden和adjustResize被组合在一起使用。
windowSoftInputMode常用的属性有adjustPan,adjustResize,adjustNothing
adjustPan
窗口内容不会调整大小,而是向上平移,以便当前获得焦点的字段不被键盘遮挡。Activity窗口(DecorView)大小不变。当获取到焦点的EditText位于屏幕下方,软键盘弹出会遮挡到EditText时,整个DecorView会往上移动,至于上移多少并不确定。一般是上移至使EditText刚好不被软键盘遮挡住为止。
图片
adjustResize
当软键盘显示时,窗口会调整大小,以便为软键盘腾出空间。通常意味着窗口的内容会向上移动,以便为键盘腾出空间。DecorView大小不会改变,内容区contentView(id = android.R.content)会相应的缩小为键盘腾出空间。
图片
注意:adjustResize只是调整contentView的大小,所以还是有可能覆盖掉EditText。
adjustNothing
Activity窗口不会做任何调整,contentView大小也不会改变。
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经