安卓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这两个属性都会失效。
adjustPan | adjustResize | |
全屏模式+webview | X | X |
非全屏模式+webview | X | √ |
任何模式+无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 移动端 软键盘弹起遮挡输入框