由于公司开发的 App 中,Html 的页面嵌入的有点多,坑爹的是,还有很多输入框,这就算了,还要求全屏。然后就出现了这个情况。
下面来唠叨唠叨具体的来龙去脉。
起初是这样的,整个项目基本完工了。测试发现,Html 的输入框在下半屏幕的时候,点击,软键盘弹出来的时候,会把输入框挡住。
好吧,这个问题确实有点大,要是小问题就不管也算了,先上线,以后修复。当时也是临下班的时候才跟我说,没办法,只能头头是道的答应下来,明天解决。哈哈。。。。。。不想加班,加班会猝死的。
第二天开始疯狂的搜索。结果杳无音信,没办法,自己写了个 demo 测测,结果,自己的可以,为啥?一个一个慢慢排除,自己的demo的属性和项目中的webview的属性这部分核对一遍,发现,没用,都一样,最后排除到 Manifest 清单文件中的 Activity 的注册那里,老子火大,一口气全部属性删干净,结果一测,问题就出现在这里,继续顺藤摸瓜,排除掉几个自己不可能的干扰的属性和根本不可能的影响的属性,结果一测,咦,弹出来了,问题就出现在这里,再排出掉那些根本不可能的影响的属性外。测了一下,基本锁定在了全屏这个属性的影响了。
事情总算有点眉目了。现在再次进行一轮的搜索,发现网上已经很多弟兄已经遇到过这个问题了,但十有八九都是没解决,只是知道这是Google 留给开发者的一个坑,因为在全屏的状态下,会自动屏幕掉 adjustResize 这些属性,也就是是说,无论这些属性加不加都没什么关系,很多人知道了是 Google 的坑,也就没多大理会了,但还是有些找出了解决方案,哈哈,代码搬运工,把砖搬过来就可以了,简单。
下面是解决方案:
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvMTAwODgwOC8yMDE2MTEvMTAwODgwOC0yMDE2MTEwNzExNTAzMDI4MC05NjMzOTEyMzcucG5n.png)
在Activity/Fragment的onCreate()/onCreateView()里调用AndroidBug5497Workaround.assistActivity(Activity);
这里提醒一下,最好放在最后面。我一开始放在 super 后面,setcontentView 前面,报了空指针。
最后为了省事 ,直接放在onCreate最后面。
最后说一下原理,原理就是当软键盘弹出来的时候,webview的高度根据屏幕的大小进行动态的调整
代码搬运,希望能够帮助到各位。感谢答案提供者,祝生活愉快。也为我在此记上一笔。
2016-11-07 |