如何检测Android WebView加载页面的时间?

时间:2016-01-06 04:10:56

标签: android webview

我有一个应用程序显示启动页面,并在WebView中加载URL时删除该启动页面。以下是我们用于删除启动页面的相关代码:

browser.setWebViewClient(new BrowserClient() {
 @Override
 public void onPageFinished(WebView view, String url) {
  super.onPageFinished(view, url);
  // Work around for WebView onPageFinished called twice                
  if (flag == true) {
   browser.setVisibility(View.VISIBLE);
   splashImage.setVisibility(View.INVISIBLE);
   pageLoader.setVisibility(View.INVISIBLE);
  } else {
   flag = true;
  }
 }
});

此代码有效...除了它很慢。在网页加载很久之后,启动页面的删除时间太长了。

有关WebView加载页面时如何可靠检测的提示吗?我过去几天一直在研究这个问题,而且我似乎无法想出任何可靠的东西。

我看到的最有希望的是以下内容,但是在Android控制台中输入此代码会引发错误:

@Override
public void invalidate() {
 super.invalidate();

 if (getContentHeight() > 0) {
  // WebView has displayed some content and is scrollable.
 }
}

谢谢!

编辑:有很多答案提议onPageFinished,甚至有人将此标记为副本,并带有使用onPageFinished的解决方案的链接。伙计,我们已经在使用onPageFinished 。我们正在寻找onPageFinished的替代方案,因为它是多么不可靠。

4 个答案:

答案 0 :(得分:2)

如果您需要,可以通过使用此Web客户端加载页面进度来实现此目的,您也可以使用此功能。

 webView.setWebChromeClient(new WebChromeClient() {
                public void onProgressChanged(WebView view, int progress) {
                   Log.e("progress", ""+progress);
                   if (progress == 100) { //...page is fully loaded.
                     // TODO - Add whatever code you need here based on web page load completion...                  
                   } 
                }
            });

答案 1 :(得分:0)

您应该使用WebChromeClient.onProgressChanged()来获取加载页面的当前进度。

答案 2 :(得分:0)

如果您使用的启动画面是一个简单的静态图像,那么您可以尝试以下方法:

  1. 在XML中,在WebView中嵌套启动画面(ImageView):

    strtol()
  2. 现在是运行时代码:

    <WebView android:id="@+id/wv_your_web_view_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ImageView android:id="@+id/iv_your_splash_screen_id"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@mipmap/img_the_coolest_image_ever"
            android:contentDescription="@string/splash_screen_desc"/>
    </WebView>
    
  3. ... 这可以保证您可以从WebView中直接访问启动画面,因此可以在您请求的网页可供查看时立即停用或隐藏它。

答案 3 :(得分:0)

这可以通过将WebViewClient()用于webview来完成。

参考:How can I know that my WebView is loaded 100%?