WebView输入框软键盘遮挡问题(沉浸状态栏和adjustResize的冲突)

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

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

2022-11-12-10-30-45.png

如果你的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 布局通常是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值