2010-10-11 18 views
31

Sto tentando di aprire una pagina Web nella mia applicazione usando WebView. Quando apro la pagina Web, mi mostra una schermata vuota per un po 'e poi apro quella pagina nel browser all'interno della mia applicazione.come mostrare la barra di avanzamento sulla webview?

Qualcuno mi suggerisce come mostrare i progressi o sbarazzarsi di quello schermo vuoto che viene durante il caricamento di Webview?

Sto usando seguente codice:

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

possibile duplicato del [Android barra di avanzamento WebView] (http://stackoverflow.com/questions/2537454/android-webview-progress -bar) –

risposta

40

Prova questo:

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

funziona anche per me :) – sunil

+0

quando faccio clic su url aperto tramite l'applicazione chrome. Ma voglio aprirlo sulla mia vista web con la barra di avanzamento della linea. –

+5

Window.FEATURE_PROGRESS è obsoleto – amorenew

10

Hai bisogno di fare qualcosa di simile:

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

E poi

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

Aggiornamento
So che è un po 'tardi ma ho poco nota a margine: non si dovrebbe usare setWebViewClient() due volte. La seconda chiamata annulla la prima chiamata in modo da non ricevere la gestione degli errori.

+0

grazie anche entrambi funzionanti :) – UMAR

3

1. Nel OnCreate ur chiamata AsyncTask.

2. In asynctask è sufficiente eseguire la finestra di dialogo di avanzamento e visualizzare la finestra di dialogo di avanzamento.

3. Nel client WebView u solo mostrare di nuovo progredire dialogo fare clic sul link del sito web che si aprono in ur WebView e dopo collegamento del carico completa abbiamo sovrascrivere il metodoonPageFinished e in questo metodo abbiamo respingere il progresso dialogo.

OnCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.web_view); 

    web_view = (WebView) findViewById(R.id.web_view); 

    OpenWebSiteInWebView opensite = new OpenWebSiteInWebView(); 
    opensite.execute(); 

} 

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

Ecco il codice che sto usando:

All'interno 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); 
    } 

}); 

Ecco l'XML:

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

Spero che questo aiuti ..

0

Ecco il codice che sto utilizzando in Kotlin:

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" 
} 
Problemi correlati