【WebView为什么没有在软键盘弹出时更新布局】

默认Activity情况下,软键盘弹出时,通过给DecorView的LinearLayout添加"layout_margin_bottom=键盘高度",实现R.id.content避开软键盘。

如果你的WebView出现输入框被软键盘遮挡问题,需要查看下为什么上述逻辑没有生效?

我在项目上遇到的原因是,WebView页面设置了window布局延伸到状态栏,导致 adjustResize 无法生效,窗口尺寸也就不会适配软键盘。

// 布局延伸到状态栏

int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

mWindow.getDecorView().setSystemUiVisibility(uiFlags);

【如何手动处理软键盘更新布局】

通用解决方案是 addOnGlobalLayoutListener 来监听,网上有现成的方案叫 AndroidBug5497Workaround

我采用了这个方案,差点导致了线上Live Issue。原因是这个方案的适用场景是全屏显示,既沉浸到状态栏,也沉浸到了底部虚拟按键高度,导致WebView被底部虚拟按键吃进去一部分,最下面的内容不可见!!!每一个方案都有它适用的场景,不理解清楚为什么要这么写,不要随便拿来使用哈。

这里需要对DecorView的布局有一个详细的了解。

DecorView 中添加的第一个View是 mContentRoot,mContentRoot 比较常见的布局文件是 R.layout.screen_simple。PhoneWindow 的 mContentParent 是 DecorView 布局中对应 ID 为“content”的视图。除了视图“content”之外,DecorView 的视图还有 ID 为“title” 的 WindowTitle。

setContentView 时,创建 subDecor。subDecor 布局通常是

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: