Android窗口软键盘调整的关键:windowSoftInputMode属性设置

移动开发 Android
当软键盘显示时,窗口会调整大小,以便为软键盘腾出空间。通常意味着窗口的内容会向上移动,以便为键盘腾出空间。DecorView大小不会改变,内容区contentView(id = android.R.content)会相应的缩小为键盘腾出空间。

windowSoftInputMode 是 Android 中的一个属性,定义了当屏幕上有焦点且需要显示软键盘(即屏幕键盘)时,活动(Activity)窗口应该如何调整。属性位于 AndroidManifest.xml 文件中,针对每个 <activity> 标签进行设置。

<activity 
    android:name=".MainActivity"
    android:windowSoftInputMode="stateHidden|adjustResize">
</activity>

windowSoftInputMode 有多个可能的值,可以分为两类:state 前缀的值和 adjust 前缀的值。

  1. 「state 前缀的值」:

stateUnspecified:软键盘的默认状态由系统决定。

stateUnchanged:软键盘将保持上一次的状态,无论是可见还是隐藏。

stateHidden:当 Activity 被创建时,软键盘是隐藏的。

stateAlwaysHidden:软键盘总是隐藏的,即使用户选择了一个需要输入文本的字段。

stateVisible:当 Activity 被创建时,软键盘是可见的。

stateAlwaysVisible:软键盘总是可见的。

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

责任编辑:武晓燕 来源: 沐雨花飞蝶
相关推荐

2017-07-03 17:20:55

Android软键盘控制开发问题

2013-06-27 17:26:01

AndroidEditText

2009-08-21 13:25:49

C#打开软键盘

2024-03-06 09:16:57

PAD设备kikaInput鸿蒙

2021-08-07 15:31:45

Windows 10Windows微软

2017-12-05 15:26:19

2017-12-05 13:12:35

Android软键盘参数

2020-03-24 09:34:00

移动端H5软键盘

2021-07-13 09:49:08

鸿蒙HarmonyOS应用

2019-04-25 10:20:22

H5软键盘前端

2013-04-01 17:05:28

2021-02-20 22:15:44

Android 代码操作系统

2009-04-15 08:18:44

AndroidGoogle移动OS

2019-08-05 08:02:31

AI 数据人工智能

2013-05-14 10:27:46

Android开发设置程序属性

2022-04-26 10:41:46

Android游戏开发工具

2009-05-07 17:24:05

Android 1.5CupcakeAndroid

2009-05-13 08:37:10

GoogleAndroid移动OS

2012-07-11 09:21:35

Windows Pho

2011-06-03 14:04:11

Android
点赞
收藏

51CTO技术栈公众号