时间:2021-05-21
前言
在使用Webview进行滑动操作时,从屏幕可见区域外向内滑动时,会出现webview区域闪烁的问题(反之也是),本文将提供一种解决方案。
问题图示
xml布局:
可以看到,NestedScrollView嵌套webview,且webview初始未在一屏内时,滑进出屏幕时会有短暂的白色块。
解决问题
方案对比
方案 考虑点 android:hardwareAccelerated="false" 5.0 开始Android系统为了充分利用GPU的特性,使得界面渲染更加平滑而默认开启的,如果关掉的话,那么整个网页不流畅了,岂不是得不偿失——>放弃 setBackgroundColor(Color.parseColor(“#00000000”)); setBackgroundResource(R.drawable.white); 设置底色背景,但是webview本身是加载的H5页面,使用的是H5页面的底色背景,而且通过上面的gif可以看出,没有效果——>放弃 ==通过样式布局,让webview保持在第一屏内初始化== 本文尝试的方案方案探索
1.xml布局
通过FrameLayout来叠加使得webview保持在第一屏内初始化,然后设置webview的padding,这样使得完整的H5内容是在ContentView下方显示。
但是——>webview设置padding根本无效!!!
怎么办呢?无论怎样也想不到为什么会如此,毕竟本身api的实现上是有些缺陷的(https://stackoverflow.com/questions/9170042/how-to-add-padding-around-a-webview )
2.解决问题
最终的解决方案则是通过注入js代码来控制H5的padding来解决。
看下猜想运行的结果:
H5的显示缺少了顶部,这样看来padding是没有效果的。但是,为什么会没有效果呢,难道设置padding有问题?
之后查看了上面嵌入的网页的源码查看了下(网页是网络上随便找的一个url):
https://36kr.com/
打开网页编辑模式,查看body这块的样式:
可以看到要注入的js控制的样式这块是没有设置的。因此可以将padding-top的参数通过这里设置进去。
但是发现设置的该参数无效,是什么原因呢?接着往下翻:
原来是body中控制了padding-top的最高级样式显示,所以element-style中设置无效。所以要么把这段注释掉,重新写入至element-style中,要么尝试设置margin-top的方法。这里采用后者的做法:
可以看到,网页顶部出现了设置好的marin-top空白的高度。
只需要将这部分操作转换为对应的代码即可:
将上面的
替换为:
3.运行效果
可以看到已经没有闪烁了。
总结
整个方案的实现其实就两块:
1.布局,让webview在一屏内初始;
2.设置H5网页的margin-top或者padding-top;
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
电脑屏幕闪烁如何解决?小编带来了电脑屏幕闪烁黑屏解决方法,怎么无缘无故的电脑屏幕就一闪一闪的呢?有的时候还会黑屏,怎么回事呢?请试一试下文的解决方法吧。
笔记本电池的情况下,打开视频文件时,屏幕会闪烁一下,关闭视频文件时候屏幕又会闪烁一下。解决方法: 1、打开或关闭视频文件时屏幕闪烁为PowerPlay功能开启
电脑屏幕出现条纹闪烁解决方法大家可以来了解一下,如果你的笔记本电脑或台式电脑出现条纹并闪烁的话,不妨就试一试下文介绍的解决方法吧~ 原因一、受到外部干扰
主要分析Android中Listview滚动过程造成的图片显示重复、错乱、闪烁的原因及解决方法,顺便跟进Listview的缓存机制。1、原因分析Listview
Android解决WebView无法上传文件的问题Android原生的WebView并不支持上传文件,需要我们自己实现相应的方法。于是我把工作中的相关代码记录下