美文网首页
View.VISIBLE和GONE引起的WebView无法正常加

View.VISIBLE和GONE引起的WebView无法正常加

作者: 奋斗小青年Jerome | 来源:发表于2018-04-19 11:39 被阅读59次

    在webview使用过程中,对某些页面的优化,可能会用到webView.setVisibility(View.GONE),在webview加载完毕之后再webView.setVisibility(View.VISIBLE),或者不光webview里面这么用,在很多页面也这么用过,针对view的这三个属性(visible,invisible,gone)之前也就一直在用,没有注意这个细节就是

    View.VISIBLE--->可见
    View.INVISIBLE--->不可见,但这个View仍然会占用在xml文件中所分配的布局空间,不重新layout
    View.GONE---->不可见,但这个View在ViewGroup中不保留位置,会重新layout,不再占用空间,那后面的view就会取代他的位置

    某一天,我们的某一个页面用了H5,要在webview里面去加载它,结果测试拿着手机过来说安卓的H5显示的有问题,跟IOS的不一样,我一看还真不一样,安卓的H5页面在webview里面加载完之后,有些地方的尺寸有问题,高度不对,该显示的也有很多没有显示...(心中一万只XXX)

    最开始想的是不是手机问题,换了一台手机,结果还是如此;
    然后就是在浏览器里面直接测试,发现浏览器测试没问题;
    到这基本就确定是webview的问题,跟后台的兄弟一测试,发现他的代码里面js在获取屏幕宽度的时候,居然获取的是0,导致在计算样式的时候出了问题..

    为什么会这样?我再次在浏览器里面运行,他那边就能够获取到宽度,换成webview就不行?经过与H5兄弟的一番分析,怀疑我的webview在loadUrl之前,宽度是0.. FK.. 看了一眼自己的代码,发现
    在onPageStarted的时候设置了webview的gone,然后在onPageFinished的时候设置了webview的visible,因为我的项目涉及到app的日夜间模式切换,当时设置这个webview的隐藏跟显示也是为了适配这个模式,另一个是为了优化性能...
    我将这两个设置隐藏显示的代码去掉,重新加载,结果问题解决..
    最终解决方案,将webview设置成View.INVISIBLE,因为它不可见,但是会分配空间,占用View的位置,有具体的宽跟高
    究其原因,我猜想可能是在我设置了View.GONE,在wenviewloadUrl的时,不能正确获取到webview的宽度,加载的时候也就出问题了

    相关文章

      网友评论

          本文标题:View.VISIBLE和GONE引起的WebView无法正常加

          本文链接:https://www.haomeiwen.com/subject/letwkftx.html