2014-12-05 100 views
2

加載網址時可以顯示進度條嗎?我需要顯示進度條中的進度級別,我可以使用自定義進度條。但我無法找到代碼來獲取他已加載的網址的確切進度。這是我當前的代碼:加載網址到WebView時顯示ProgressBar

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    browser = (WebView)findViewById(R.id.webView1); 
    progressBar = (ProgressBar)findViewById(R.id.progressBar); 
    browser.setWebViewClient(new MyBrowser()); 
    browser.setWebChromeClient(new MyCustomChromeClient()); 
    mContext=this.getApplicationContext(); 
    browser.loadUrl(target_url); 
    MainActivity.this.progressBar.setProgress(0); 
} 

private class MyBrowser extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     String host = Uri.parse(url).getHost(); 
     if (host.equals(target_url_prefix)) 
     { 
      if(mWebviewPop!=null) 
      { 
       mWebviewPop.setVisibility(View.GONE); 
       baseLayout.removeView(mWebviewPop); 
       mWebviewPop=null; 
      } 
      return false; 
     } 

     if(host.equals("m.facebook.com")) 
     { 
      return false; 
     } 
     view.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onReceivedError(WebView view, int errorCode, 
           String description, String failingUrl) { 
     noInternet(); 
    } 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     visible(); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     unvisible(); 
     System.out.println("\n" +view.getUrl()); 
     if(url.startsWith("https://m.facebook.com/v2.1/dialog/oauth")){ 
      if(mWebviewPop!=null) 
      { 
       mWebviewPop.setVisibility(View.GONE); 
       baseLayout.removeView(mWebviewPop); 
       mWebviewPop=null; 
      } 
      view.loadUrl(redirectUrl); 
      return; 
     } 
     super.onPageFinished(view, url); 
    } 
} 

private class MyCustomChromeClient extends WebChromeClient 
{ 

    @Override 
    public boolean onCreateWindow(WebView view, boolean isDialog, 
            boolean isUserGesture, Message resultMsg) { 
     mWebviewPop = new WebView(mContext); 
     mWebviewPop.setVerticalScrollBarEnabled(false); 
     mWebviewPop.setHorizontalScrollBarEnabled(false); 
     mWebviewPop.setWebViewClient(new MyBrowser()); 
     mWebviewPop.getSettings().setJavaScriptEnabled(true); 
     mWebviewPop.getSettings().setSavePassword(false); 
     mWebviewPop.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.MATCH_PARENT)); 
     baseLayout.addView(mWebviewPop); 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(mWebviewPop); 
     resultMsg.sendToTarget(); 

     return true; 
    } 

    @Override 
    public void onCloseWindow(WebView window) { 
    } 

    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     MainActivity.this.setValue(newProgress); 
     super.onProgressChanged(view, newProgress); 
    } 
} 
public void setValue(int progress) { 
    this.progressBar.setProgress(progress); 
} 
} 

如何獲取加載url的確切進度。有了這段代碼,我可以得到進度條加載,但它顯示爲一個不確定的進度條。我想顯示一個自定義視圖的進度條。它應該顯示url成功加載的百分比。所以我可以膨脹一個自定義的視圖,但我不知道如何得到確切的百分比。有人可以幫助我使用此代碼。

回答

3

WebChromeClient的onProgressChanged()爲您提供有關頁面加載狀態的進度。請參閱以下有關android api文檔中的函數的信息。

public void onProgressChanged (WebView view, int newProgress) 

Added in API level 1 
Tell the host application the current progress of loading a page. 

Parameters 
view The WebView that initiated the callback. 
newProgress Current page loading progress, represented by an integer between 0 and 100. 
+0

謝謝:)正是我需要的答案:) – 2014-12-05 15:09:27

1

我不熟悉你的Webview。但是我在doInBackground AsyncTask ussualy中打開了URL。所以我找不到直接用百分比表示的方法。但你可以做的也許是欺騙,像這樣的東西:

Set 20% when your app has confirmed that there is a INTERNET connection enables on the Device. 
Set 50% when it reaches the AsyncTask to open URL (or however you initialize .connect()) 
And finally set 100% when URL is opened. 

這是一個虛擬的方法。但除此之外,你應該以某種方式使用時間(秒)。但是,應用程序無法預見它需要打開URL多長時間。 100%代表打開URL所需的秒數,但在加載URL時無法訪問,因爲App當時不知道需要打開它多少。

你可以做一個測試運行和時間秒。設置一個計時器,當你開始打開URL,並打開它時停止計時器。但那段時間只是在這種特殊情況下。如果有人使用慢速Android設備或Bad Internet Connection,則可能需要更長的時間。

希望我的回答有所幫助。如果存在一種更精確的方法,我相信這裏的人會寫出來。

+0

謝謝:)我也想到了定時器。但是在不同的設備中可能會有所不同。感謝您的想法。 – 2014-12-05 15:06:35