安卓webview中键盘遮挡输入框如何解决

Posted 萧策安°

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓webview中键盘遮挡输入框如何解决相关的知识,希望对你有一定的参考价值。

关键词:安卓原生、unity、webview、键盘遮挡输入框、沉浸式状态栏。

首先是最简单的情况,当我们app有一个比较靠下的输入框时,唤出键盘会遮挡住输入框。

这种情况的对应方式很简单,只需要找到安卓项目清单文件androidManifest.xml,对activity进行android:windowSoftInputMode值进行设定就可以了,设定为adjustPan或者adjustResize即可。

<activity
    ...
    android:windowSoftInputMode="adjustPan"  >
    ...</activity>

adjustPan或者adjustResize是两种不同的输入框适应形式,下面附上非常简略的区别对比:

adjustPan:整个页面往上推。

adjustResize:能推的努力推。

更详细的地方可以百度。

如果到这里你的问题解决了,那实在是太好了。不过如果你尝试上述方案发现一点用没有,太惨了,你踩了大雷了。

如果你的键盘遮挡与webview挂钩了,换句话说:你的手机键盘是由webview里的输入框调起的。

这个时候情况就很复杂了,因为它涉及到全屏模式(Fullscreen)这个东西,unity的话是打包时候的是否全屏的设置,在这里是一样的概念。

Application或者activity搞了Fullscreen,或者使用了Immersive Mode、沉浸式状态栏,或者unity打包时勾选了fullScreenMode。

如果你出现问题的页面是非全屏模式的情况,activity设置adjustPan会失效,设置adjustResize没有问题。

如果你出现问题的页面是全屏模式的情况,adjustPan跟adjustResize这两个属性都会失效。

adjustPanadjustResize
全屏模式+webviewXX
非全屏模式+webviewX
任何模式+无webview

也就是说,如果你的程序不是全屏模式,但出现问题的页面有webview,只需要在activity里把android:windowSoftInputMode设定成adjustResize就可以了。

如果你的程序好巧不巧,既是全屏模式,出现问题的页面又有webview,你遇到的时2009年就被发现的一个谷歌的骨灰级bug:issue 5497。

https://issuetracker.google.com/issues/36911528

这个bug官方至2022年还没有修复,那遇到这个问题我们怎么解决呢?

12年来很多的安卓开发前端开发同学不知道多少人跌进了这个坑,我们虽然没有一个官方的解决方案,但是民间的解决方案当然存在。

先介绍两种比较简单粗暴的方案:

首先当然是取消全屏模式了,惹不起还躲不起吗,爷不干了。直接一手取消全屏模式再给android:windowSoftInputMode设置成adjustResize,困难迎刃而解。当然这种方式领导们可能不会接受哈,实在是过于简单粗暴了。

第二种方案就是比较迂回的方案了,如果这个webview展示的是咱们自己写的网页哈,就让咱们自己的网页下边增加比较长的留白,给键盘留一点的空间。

当然如果这个webview咱们动不了,就只剩下最后一个独苗苗——方案三了。

AndroidBug5497Workaround类

这也是各路大佬们一致偏爱的一种处理方式,只需要一个简简单单的AndroidBug5497Workaround类,优雅,非常优雅。

这是一个专门用来对应“issue 5497”的一个类,使用方法也非常亲民,只需要三步:

1、复制AndroidBug5497Workaround类到项目中。

2、在activity的onCreate方法中添加一句AndroidBug5497Workaround.assistActivity(this)。

然后就可以解决这个非常让人头痛的问题了!而且它在各个Android版本都没问题,效果基本与设置了adjustResize差不多。

关于AndroidBug5497Workaround类的代码,java版本与Kotlin版本都有,详情可以百度,就不在文章中附送了哈。

以上是关于安卓webview中键盘遮挡输入框如何解决的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机底部输入框被软键盘遮挡的坑

2020-09-18 设置沉浸式状态栏,WebView底部输入框被键盘挡住问题

iOS webview html5 移动端 软键盘弹起遮挡输入框

安卓全屏或沉浸式状态栏下输入框(EditText)被键盘遮挡解决方法

Android WebView中软键盘会遮挡输入框相关问题

flutter去除Appbar的阴影、键盘遮挡下部输入框