安卓 WebView 里点页面底部的备注输入框,键盘弹起后输入框被遮住 300px,用户看不到自己打的字,只能盲打。乍看像缓存或者权限的锅,追下去往往不是。
<activity android:name='.MainActivity'
android:windowSoftInputMode='adjustResize' />
visualViewport.addEventListener('resize', scrollActiveIntoView);
追下去是这么回事:Activity 的 windowSoftInputMode 是 adjustPan 或默认值,WebView 高度不随键盘收缩,输入框留在原位置被键盘盖住。页面自身也没有监听可视区域变化。
「WebView 软键盘遮挡」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
具体做法是,manifest 里把 Activity 改成 adjustResize;WebView 外层布局允许收缩 不要固定高度;页面监听 visualViewport 的 resize 把输入框滚进可视区;在四款安卓机上分别点底部输入框确认不被遮。
验收就看一点,键盘弹起后输入框整体上移到键盘上方,光标和输入内容都可见。
