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大小也不会改变。