2010-10-11 173 views
31

我想在我的應用程序中使用WebView打開一個網頁。當我打開網頁時,它會顯示一段時間的空白屏幕,然後在我的應用程序中的瀏覽器中打開該頁面。如何在webview上顯示進度條?

任何人都建議我如何顯示進度或擺脫webview加載過程中出現的空白屏幕?

我使用下面的代碼:

WebView mWebView = (WebView) findViewById(R.id.mywebview); 
mWebView.getSettings().setJavaScriptEnabled(true); 

// error handling 
final Activity activity = this; 

mWebView.setWebViewClient(new WebViewClient() { 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
    } 
}); 

// error handling 

mWebView.loadUrl(URL); 
mWebView.setWebViewClient(new HelloWebViewClient()); 
+0

可能重複http://stackoverflow.com/questions/2537454/android-webview-progress吧) – 2013-09-04 22:55:55

回答

40

試試這個:

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

WebView mWebView = (WebView) findViewById(R.id.mywebview); 

mWebView.getSettings().setJavaScriptEnabled(true); 

final Activity activity = this; 

mWebView.setWebChromeClient(new WebChromeClient(){ 

     public void onProgressChanged(WebView view, int progress) { 
       activity.setTitle("Loading..."); 
       activity.setProgress(progress * 100); 
        if(progress == 100) 
         activity.setTitle("My title"); 
       } 
}); 

mWebView.loadUrl(URL); 
+0

也適用於我:) – sunil 2012-06-28 12:44:24

+0

當我點擊通過鉻應用程序打開網址。但我想通過行進度欄在我的Web視圖上打開它。 – 2016-06-19 06:03:14

+5

Window.FEATURE_PROGRESS已過時 – amorenew 2016-09-08 12:20:45

10

你需要做這樣的事情:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_PROGRESS); 
    this.setProgressBarVisibility(true); 
} 

然後

final Activity activity = this; 
mWebView.setWebChromeClient(new WebChromeClient() { 
    public void onProgressChanged(WebView view, int progress) { 
     activity.setProgress(progress * 100); 
    } 
}); 

更新
我知道這是有點太晚了,但我沒有方面注意:你不應該使用兩次setWebViewClient()。第二次呼叫取消了第一次呼叫,所以你不會得到錯誤處理。

+0

謝謝太工作:) :) – UMAR 2010-10-11 06:45:53

3

1.在OnCreate中烏爾通話的AsyncTask

2.在asynctask中,您只需製作進度對話框並顯示進度對話框。

3.在網頁流量的客戶端你剛剛再次顯示進度對話框點擊它打開烏爾的WebView後完成負載連桿我們覆蓋方法onPageFinished在這個方法中,我們駁回進度網站的任何鏈接對話。

的OnCreate

​​3210

的AsyncTask

private class OpenWebSiteInWebView extends AsyncTask<String, Void, String> { 

    @SuppressWarnings("deprecation") 
    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    protected String doInBackground(String... params) { 
     web_view.setWebViewClient(new MyWebViewClient()); 
     web_view.loadUrl("ur site name"); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

    } 

    @Override 
    protected void onPreExecute() { 

     pd = new ProgressDialog(SiteOpenInWebView.this); 
     pd.setMessage("Please wait Loading..."); 
     pd.show(); 

    } 

} 

WebViewClient

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 

     if (!pd.isShowing()) { 
      pd.show(); 
     } 

     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     System.out.println("on finish"); 
     if (pd.isShowing()) { 
      pd.dismiss(); 
     } 

    } 
} 
17

這裏是我使用的代碼:

內WebViewClient:

webView.setWebViewClient(new WebViewClient() { 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
     findViewById(R.id.progress1).setVisibility(View.VISIBLE); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     findViewById(R.id.progress1).setVisibility(View.GONE); 
    } 

}); 

這裏是XML:

<ProgressBar 
    android:id="@+id/progress1" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

希望這有助於..

0

這裏是我使用的科特林代碼:

private fun setupWebView() { 

    val webViewClient: WebViewClient = object: WebViewClient() { 

     override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { 
      view?.loadUrl(request?.url.toString()) 
      return super.shouldOverrideUrlLoading(view, request) 
     } 

     override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { 
      showProgressDialog() 
      super.onPageStarted(view, url, favicon) 
     } 

     override fun onPageFinished(view: WebView?, url: String?) { 
      hideProgressDialog() 
      super.onPageFinished(view, url) 
     } 
    } 
    webView.webViewClient = webViewClient 

    webView.settings.javaScriptEnabled = true 
    webView.settings.defaultTextEncodingName = "utf-8" 
} 
[的Android的WebView的進度條(的