Android中解决ScrollView嵌套WebView底部留白太多和高度问题

article/2025/9/29 7:23:44

前言:

Android中WebView的坑很多,比如低版本内核不支持,加载速度慢,重定向等等,当使用ScrollView嵌套WebView时坑更多,有人说为啥要嵌套?单独使用WebView或者ScrollView不行吗?答案是当然不行,需求就是如此,页面涉及的内容比较多,一个ScrollView显示不完,怎么实现产品和经理不会管的,反正开发要解决,当然这里没有引战的意思,也不是吐槽,只是纯粹讨论技术.

1.关于网上在ScrollView嵌套WebView时有几种常规的解决方案:

img

img

     Mobile mobile = new Mobile();addJavascriptInterface(mobile, "mobile");

private class Mobile {@JavascriptInterfacepublic void onGetWebContentHeight() {//重新调整webview高度X5WebView.this.post(() -> {X5WebView.this.measure(0, 0);int measuredHeight = X5WebView.this.getMeasuredHeight();ViewGroup.LayoutParams layoutParams = X5WebView.this.getLayoutParams();layoutParams.height = measuredHeight;X5WebView.this.setLayoutParams(layoutParams);});
​}
}
​

2.实现的效果图如下:

img

3.这样设置后发现并没有什么卵用,换第2种:

img

img

@JavascriptInterface
public void resize(final float height) {((Activity) getContext()).runOnUiThread(new Runnable() {@Overridepublic void run() {X5WebView.this.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density)));}});
}

4.这种方法也没有什么用,有的文章说是前端H5也要写该方法,不知道是不是此原因.实现的效果图如下:

img

5.还有一种方法是在Stack Overflow上找的,虽然解决了留白问题,但是宽度又没有显示完整,最后放弃了。

6.终极大法:自定义WebView,在onMeause重新测量高度。

/*** @作者: njb* @时间: 2019/12/4 12:55* @描述: 自定义WebView适配不同手机高度*/
@SuppressLint("NewApi")
public class CustomNestedScrollWebView extends WebView {public CustomNestedScrollWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);}
​public CustomNestedScrollWebView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}
​public CustomNestedScrollWebView(Context context, AttributeSet attrs) {super(context, attrs);}
​public CustomNestedScrollWebView(Context context) {super(context);}
​@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//根据手机屏幕重新计算高度int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, mExpandSpec);}
}
​

7.最后给出运行成功的截图如下:这里我跑的是模拟器,项目中跑了各种真机小米、华为、魅族、锤子等等,都正常显示.

img

img

8.至此,ScrollView嵌套Webview底部留白问题得以真正解决.

最后小伙伴们如有更好的方法可以给我留言,如有问题,欢迎提出,我及时更改。谢谢大家

9.项目demo源码地址:

X5WebViewDemo: 腾讯X5内核使用实例


http://chatgpt.dhexx.cn/article/YQNfuMBJ.shtml

相关文章

webview适配(一):文件选择,相机拍照,相册选择

说起来android适配webview就是比较烦人,本人遇到过很多坑,但是之前从来没有过记录,例如:文件选择框,toast弹框,视频不正常播放,视频各种不全屏(网上说的方法都不行时候就崩溃了&…

Android跟web哪个好,比系统自带的WebView更好用 | AgentWeb

名称 AgentWeb 语言 Android 平台 GitHub 作者 Justson 在混合化开发大行其道的今天,安卓开发经常会用到WebView,用于加载网页。系统自带的WebView性能和流畅度都一般,今天给大家推荐一款第三方WebView,性能比系统自带的要好&…

X5 浏览器内核调研报告

关于这份调研报告,不是从技术角度深入探索,重点是从产品本身分析,通俗易懂才是重点。主要是为了锻炼平时做技术调研和竞品分析的能力,以及业务拓展的技术储备。内容有点多,下面 **X5 **内核调研报告将分为三个环节&…

南京理工大学计算机考研资料汇总

南京理工大学研究生院 http://gs.njust.edu.cn/ 南京理工大学计算机科学与工程学院 http://cs.njust.edu.cn/ 南京理工大学计算机科学与工程学院始建于1953年创办的哈尔滨军事工程学院模拟计算机研究组,先后经历了炮兵工程学院计算机教研室(1960年&a…

上海海洋大学计算机考研资料汇总

上海海洋大学研招网 上海海洋大学信息学院 上海海洋大学(Shanghai Ocean University)是上海市人民政府与国家海洋局、农业农村部共建高校,国家“双一流”世界一流学科建设高校,入选国家卓越农林人才教育培养计划、国家建设高水平…

2024东华大学计算机考研信息汇总

最新数据见:东华大学_信息汇总_N诺计算机考研 东华大学计算机科学与技术学院官网:http://cst.dhu.edu.cn/ 东华大学(Donghua University),简称“东华”,地处中国上海,是教育部直属、国家“211工…

西南石油大学计算机考研资料汇总

西南石油大学(Southwest Petroleum University),简称“西南石大”,坐落于四川省成都市,是经中华人民共和国教育部备案的一所中央与地方共建、以四川省人民政府管理为主的高等院校,是世界一流学科建设高校、…

2023东北大学计算机考研信息汇总

完整内容见:东北大学 东北大学计算机科学与工程学院 东北大学软件学院 东北大学秦皇岛分校 东北大学(Northeastern University),简称东大(NEU),中华人民共和国教育部直属的高水平研究型全国…

2023上海海洋大学计算机考研信息汇总

上海海洋大学研招网 上海海洋大学信息学院 上海海洋大学(Shanghai Ocean University)是上海市人民政府与国家海洋局、农业农村部共建高校,国家“双一流”世界一流学科建设高校,入选国家卓越农林人才教育培养计划、国家建设高水平…

东北大学计算机考研资料汇总

东北大学计算机科学与工程学院 东北大学软件学院 东北大学秦皇岛分校 东北大学(Northeastern University),简称东大(NEU),中华人民共和国教育部直属的高水平研究型全国重点大学,坐落于东北…

2023北京大学计算机考研信息汇总

原文转载于:北京大学 N诺小程序 - 计算机学习考研必备神器 北京大学信息科学技术学院 北京大学软件与微电子学院 北京大学前沿交叉学科研究院 北京大学信息工程学院 北大研究生院 北京大学(Peking University)简称“北大”&#…

北京大学计算机考研资料汇总

北京大学信息科学技术学院 北京大学软件与微电子学院 北京大学前沿交叉学科研究院 北京大学信息工程学院 北大研究生院 北京大学(Peking University)简称“北大”,诞生于1898年,初名京师大学堂,是中国近代第…

2023西南石油大学计算机考研信息汇总

西南石油大学(Southwest Petroleum University),简称“西南石大”,坐落于四川省成都市,是经中华人民共和国教育部备案的一所中央与地方共建、以四川省人民政府管理为主的高等院校,是世界一流学科建设高校、…

2023南京理工大学计算机考研信息汇总

南京理工大学研究生院 http://gs.njust.edu.cn/ 南京理工大学计算机科学与工程学院 http://cs.njust.edu.cn/ 南京理工大学计算机科学与工程学院始建于1953年创办的哈尔滨军事工程学院模拟计算机研究组,先后经历了炮兵工程学院计算机教研室(1960年&am…

2023中国科学院大学计算机考研信息汇总

原文转载于:中国科学院大学 N诺小程序 - 计算机学习考研必备神器 中国科学院大学(University of Chinese Academy of Sciences),简称“国科大”,是国家教育部正式批准成立的一所以研究生教育为主的科教融合、独具特色…

HTMLTestRunner生成测试报告报错 ModuleNotFoundError: No module named ‘StringIO‘

今天在学习使用HTMLTestRunner生成测试报告时遇到一个报错,如图所示: 网上搜索了下“No module named StringIO”解决方法,原来我用的是Python 3.X版本,而下载的HTMLTestRunner适用于Python2.X(下载链接:ht…

python中IO库中StringIO方法和BytesIO方法用法详解

有时候数据读写不一定是文件,也可以在内存中读写。StringIO顾名思义就是在内存中读写str。 Python在内存中读写数据,用到的模块是StringIO和BytesIO。 getvalue()方法用于获得写入后的str。 StringIO操作的只能是str,如果要操作二进制数据…

python io模块_python中的StringIO模块

原博文 2015-12-03 13:48 − StringIO经常被用来作为字符串的缓存,应为StringIO有个好处,他的有些接口和文件操作是一致的,也就是说用同样的代码,可以同时当成文件操作或者StringIO操作。 一、例子 import StringIO s StringIO…

StringIO和BytesIO

StringIO和BytesIO 文章目录 StringIO和BytesIOStringIO常用方法 BytesIO常用方法 StringIO io模块中的类 导入方式 from io import StringIO内存中,开辟的一个文本模式的buffer,可以像文件对象一样操作它当close方法被调用的时候,这个buffe…

python中StringIO和BytesIO

1. 类文件对象 最常见的io操作是将磁盘中的文件读到内存以及内存内容写入文I件。还有一种内存和内存之间的IO,叫类文件对象,python中的StringIO和BytesIO就是类文件对象,通俗解释即:像操作文件一样在内存中操作字符串和二进制内容…