Aggiungere una barra di avanzamento in WebView

Sto cercando di aggiungere una barra di avanzamento / caricamento alla mia applicazione che utilizza WebView . Sono confuso su come implementare una barra di avanzamento che compare each volta che viene cliccato un collegamento.

Codice attuale:

  • Modifica di FileInputStream per setDataSource mediaPlayer
  • Elenca tutta la musica in MediaStore con i PATH
  • Android: come creare uno background dal pattern?
  • Dove sono? - Prendi paese
  • Android - Sconosciuta exception di host quando si analizza un feed RSS
  • Timeout di attività inattivo per HistoryRecord
  •  public class CULearnBrowser extends Activity { WebView webview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new HelloWebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("https://culearn.colorado.edu/webct/entryPageIns.dowebct"); } private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } } 

    Disposizione di attività:

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> 

  • Alternativa alla libreria showCase per i tutorial utente di applicazioni?
  • Android KitKat consente ai dispositivi che supportno Bluetooth LE per agire come dispositivo periferico?
  • la posizione di visualizzazione delle liste sta cambiando quando si scorge su android
  • Perché dobbiamo call super in Android a volte?
  • Come hide la barra del titolo per un'attività in XML con il tema personalizzato esistente
  • Possiamo utilizzare Guid come chiave primaria nel database Sqlite
  • 8 Solutions collect form web for “Aggiungere una barra di avanzamento in WebView”

    Questo collegamento può aiutarti.

    Ho aggiunto alcune righe nel tuo codice e ora sto funzionando bene con la barra di avanzamento.

      getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.main ); // Makes Progress bar Visible getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); webview = (WebView) findViewById(R.id.webview); webview.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { //Make the bar disappear after URL is loaded, and changes string to Loading... setTitle("Loading..."); setProgress(progress * 100); //Make the bar disappear after URL is loaded // Return the app name after finish loading if(progress == 100) setTitle(R.string.app_name); } }); webview.setWebViewClient(new HelloWebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://www.google.com"); 

    nel metodo oncreate in cui è stata impostata la visualizzazione Webview.

     @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); pd = new ProgressDialog(SiteOpenInWebView.this); pd.setMessage("Please wait Loading..."); pd.show(); web_view.setWebViewClient(new MyWebViewClient()); web_view.loadUrl("ur site name"); } 

    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(); } } } 

    passare il tuo URL in questo metodo

     private void startWebView(String url) { WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); progressDialog = new ProgressDialog(ContestActivity.this); progressDialog.setMessage("Loading..."); progressDialog.show(); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(ContestActivity.this, "Error:" + description, Toast.LENGTH_SHORT).show(); } }); webView.loadUrl(url); } 

    Inserisci una barra di avanzamento e la pagina web all'interno di un relativelayout e imposta le properties; per la barra di avanzamento come segue,

    1. Rendere visibile come GONE.
    2. CENTRilo nel Relativelayout.

    e quindi in onPageStarted () del webcliente rendere la barra di avanzamento visibile in modo che mostra la barra di avanzamento quando si fa clic su un collegamento. In onPageFinished () rendere visiblility della barra di avanzamento come GONE in modo che scompare quando la pagina ha finito di caricamento … Questo functionrà bene per il tuo scenario. Spero che questo ti aiuti…

    Ecco il codice che sto usando:

    All'interno di 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) { 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 ti aiuti..

    La risposta che stai cercando è altamente dettagliata qui:

    http://www.giantflyingsaucer.com/blog/?p=1331

    Il miglior approch che ha funzionato per me è

     webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); mProgressBar.setVisibility(ProgressBar.VISIBLE); webView.setVisibility(View.INVISIBLE); } @Override public void onPageCommitVisible(WebView view, String url) { super.onPageCommitVisible(view, url); mProgressBar.setVisibility(ProgressBar.GONE); webView.setVisibility(View.VISIBLE); isWebViewLoadingFirstPage=false; } } 

    Puoi provare questo codice nella tua attività

      private void startWebView(WebView webView,String url) { webView.setWebViewClient(new WebViewClient() { ProgressDialog progressDialog; public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } public void onLoadResource (WebView view, String url) { if (progressDialog == null) { progressDialog = new ProgressDialog(SponceredDetailsActivity.this); progressDialog.setMessage("Loading..."); progressDialog.show(); } } public void onPageFinished(WebView view, String url) { try{ if (progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog = null; } }catch(Exception exception){ exception.printStackTrace(); } } }); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); } 

    Chiamare questo metodo usando questo modo:

     startWebView(web_view,"Your Url"); 

    A volte se l'URL è morto verrà reindirizzato e verrà su onLoadResource () prima del metodo onPageFinished. Per questo motivo la barra di avanzamento non si dissolve. Per risolvere questo problema vedi la mia risposta .

    Grazie 🙂

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.