想到来总结个,是因为项目中遇到了这样一个问题,在一个布局里有一个WebView,紧跟着webView有一个Button,当进入这个页面的时候,因为webView在没有加载出来的缘故,页面最上部先显示了button,等webView加载完成后,可以很明显的看到button的移动。
为了解决这个事情,我先是想把Button GONE掉,然后做一个监听,等webView加载完成后再把Button显示出来,
于是
- mWebView.setWebViewClient(newWebViewClient()
- {
- @Override
- publicvoidonPageFinished(WebViewview,Stringurl)
- {
- //结束
- super.onPageFinished(view,url);
- }
- @Override
- publicvoidonPageStarted(WebViewview,Stringurl,Bitmapfavicon)
- {
- //开始
- super.onPageStarted(view,url,favicon);
- }
- });
我判断不灵的时候是因为webView从缓存中读取数据导致监听加载结束不准确的原因,
我就设置不让webView从缓存中读取,每次都去网络获取
- mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
而我们想要的效果是监听到webView显示出我们想要的数据后,再让Button显示出来,
于是我就尝试自定义WebView
- publicclassMyWebViewextendsWebView{
- publicinterfacePlayFinish{
- voidAfter();
- }
- PlayFinishdf;
- publicvoidsetDf(PlayFinishplayFinish){
- this.df=playFinish;
- }
- publicMyWebView(Contextcontext,AttributeSetattrs){
- super(context,attrs);
- }
- publicMyWebView(Contextcontext){
- super(context);
- }
- //onDraw表示显示完毕
- @Override
- protectedvoidonDraw(Canvascanvas){
- super.onDraw(canvas);
- df.After();
- }
- }
- privateMyWebViewmyWebView;
- myWebView.setDf(newPlayFinish(){
- @Override
- publicvoidAfter(){
- btn_submit.setVisibility(View.VISIBLE);
- }
- });
然后测试,大工高成,重写onDraw(),在应用中webView中内容开始绘制的时候再来让我们的button显示,解决了问题。