扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
关键词:安卓原生、unity、webview、键盘遮挡输入框、沉浸式状态栏。
创新互联 - 绵阳机房托管,四川服务器租用,成都服务器租用,四川网通托管,绵阳服务器托管,德阳服务器托管,遂宁服务器托管,绵阳服务器托管,四川云主机,成都云主机,西南云主机,绵阳机房托管,西南服务器托管,四川/成都大带宽,机柜大带宽租用·托管,四川老牌IDC服务商首先是最简单的情况,当我们app有一个比较靠下的输入框时,唤出键盘会遮挡住输入框。
这种情况的对应方式很简单,只需要找到安卓项目清单文件AndroidManifest.xml,对activity进行android:windowSoftInputMode值进行设定就可以了,设定为adjustPan
或者adjustResize
即可。
...
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版本都有,详情可以百度,就不在文章中附送了哈。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流