Android软键盘遮挡输入文本框问题

在开发过程中,经常遇到在某个界面有多个文本框时,点击输入会出现软件盘遮挡输入框的情况,或者是类似在登录或注册页面可以输入信息,但是键盘遮挡登录注册按钮的问题,还有遮挡住输入框下面的输入框,用户必须手动收起键盘才可以继续输入的情况。本篇文章介绍如何处理这些问题,首先我们来介绍一下adjustSize和adjustPan属性。

在搜索相关软件盘遮挡问题时,大部分文章都是推荐我们在AndroidManifest文件中的Activity标签中添加 “android:windowSoftInputMode=”adjustResize” 或者是 “android:windowSoftInputMode=”adjustPan”属性,这里我们先来介绍一下 adjustResize 和 adjustPan。官网的描述如下:

描述
adjustResize 始终调整Activity主窗口的尺寸,以为屏幕上的软键盘腾出空间
adjustPan 不通过调整Activity主窗口的尺寸为软键盘腾出空间。相反窗口的内容会自动平移,使键盘永远无法覆盖当前焦点,以便用户始终看到自己输入的内容。这通常不如调整窗口尺寸可取,因为用户可能需关闭软键盘才能进入被遮盖的窗口部分,并与之交互。

当设置属性”android:windowSoftInputMode=”adjustResize”时,多文本输入框且根布局为LinearLayout没有使用ScrollView包裹时,点击文本输入7时,主窗口尺寸被调整压缩如下所示:

在设置布局文件根布局为ScrollView时,如下所示:

可以看到当我们设置属性为”android:windowSoftInputMode=”adjustResize”且根布局为ScrollView时,调整窗口尺寸是通过平移ScrollView中的内容来实现的,注意这里的文本标题并没有平移。且ScrollView中的文本内容我们可以滚动到最底部,不会被软键盘遮挡。

当我们设置Activity属性为”android:windowSoftInputMode=”adjustPan”且根布局为LinearLayout时,点击文本输入8可以看到整个窗口包括标题向上平移如下所示:

当我们设置activity属性为adjustPan且根布局为ScrollView,这时候发现当我们点击文本输入8后滑动视图时,始终有部分文本输入框被软键盘遮挡,必须用户手动隐藏软键盘,才可以选择下面的文本输入。如下图所示:

文本输入12下面的文本输入框被键盘遮挡无法滑动。

总结一下,在使用adjustResize属性而根布局不是ScrollView的情况,Activity主窗口会被压缩显示不全,无法看到输入内容,此时使用adjustPan属性会让显示效果更好,不过需要用户手动隐藏软键盘才可以继续输入。在根布局为ScrollView的情况下,Activity使用adjustResize用户体验会更好,因为此时的adjustPan属性始终会使软键盘遮挡部分布局。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×