android软键盘遮挡WebView中input的解决方案

在Android hybrid应用中,使用WebView加载HTML页面时,软键盘弹出可能会遮挡input元素。本文介绍了两种解决方案:1) 设置WebView调整大小,使页面整体缩小;2) 软键盘弹出时,WebView内容上移,保持更好的显示效果。第二种方案更受欢迎,因为它能提供与iOS一致的用户体验,并避免布局样式问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象

在做hybrid应用时,我们用WebView来加载html页面,经常会出现软件盘弹出,遮挡了html中输入控件(如input)的问题。
无论你是用系统的原生WebView(从4.0-7.0),还是Crosswalk的XWalkView,都有这个问题! (用系统原生浏览器是没有这个问题的)
这里不得不吐槽一下,ios没有这个问题。

解决方案有以下几种:

  1. 软键盘弹出时WebView高度缩小。
  2. 软键盘弹出时,WebView内容适当上移。

个人比较喜欢第二个方案,因为:

  1. 与IOS体验一致
  2. 页面不需要重新布局,避免了有些页面在WebView高度缩小后,布局样式体验不好;

1 软键盘弹出时WebView高度缩小(网上大多数也都是说的这个方案)

设置页面adjustResize

android:windowSoftInputMode="adjustResize"

原理是软件盘弹出时,整个页面的大小都缩小了,软键盘不再遮挡WebView了,这个问题自然也就不存在了。

这个方案最简单。但有时不太好用,如果页面是上下有固定布局,中间滚动区域(如上标题栏,下方操作按钮,中间是可以滚动的信息输入区域)。点击中间滚动区域的输入框,软键盘弹出,会把底部布局也顶上去,导致中间滚动区域可能高度很小了,显示效果很差。一
一个办法是软键盘弹出时,底部布局隐藏。

window.addEventListener("resize", (v) => {
    this.LastWindowHeight = this.CurWindowHeight;
    this.CurWindowHeight = window.innerHeight;
    if ((this.LastWindowHeight - this.CurWindowHeight) /this.LastWindowHeigh
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值