Barra de progreso de Android WebView

He analizado una pregunta similar aquí pero, como soy un novato, ¿alguien podría explicar cómo hacer que esto funcione en una WebView o al menos cómo establecer un retraso de 10 segundos para que la gente sepa que se está cargando?

    Para una barra de progreso horizontal, primero debe definir su barra de progreso y vincularla con su archivo XML de esta manera, en onCreate :

     final TextView txtview = (TextView)findViewById(R.id.tV1); final ProgressBar pbar = (ProgressBar) findViewById(R.id.pB1); 

    Luego, puede usar el método ChangeChanged en su WebChromeClient:

     MyView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { if(progress < 100 && pbar.getVisibility() == ProgressBar.GONE){ pbar.setVisibility(ProgressBar.VISIBLE); txtview.setVisibility(View.VISIBLE); } pbar.setProgress(progress); if(progress == 100) { pbar.setVisibility(ProgressBar.GONE); txtview.setVisibility(View.GONE); } } }); 

    Después de eso, en tu diseño tienes algo como esto

        

    Así es como lo hice en mi aplicación.

    Acabo de encontrar un muy buen ejemplo de cómo hacer esto aquí: http://developer.android.com/reference/android/webkit/WebView.html . Solo necesita cambiar el setprogress desde:

     activity.setProgress(progress * 1000); 

    a

     activity.setProgress(progress * 100); 

    esta es la forma más fácil de agregar barra de progreso en la vista web de Android.

    Agregue un campo booleano en su actividad / fragmento

     private boolean isRedirected; 

    Este booleano evitará la redirección de páginas web causadas por enlaces muertos. Ahora puede pasar su objeto WebView y la URL web a este método.

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

    Aquí, cuando comience a cargar, se invocará a la página onPageStarted . Aquí estoy estableciendo que el campo booleano es falso. Pero cuando termine la carga de la página, llegará al método onPageFinished y aquí el campo booleano se establece en verdadero. A veces, si url está muerto, se redireccionará y llegará a onLoadResource() antes del método onPageFinished . Por esta razón, no ocultará la barra de progreso. Para evitar esto estoy comprobando if (!isRedirected) en onLoadResource()

    en el método onPageFinished() antes de onPageFinished() diálogo Progress puede escribir su código de retraso de 10 segundos

    Eso es. Feliz encoding 🙂

    Es cierto, también hay una opción más completa, como cambiar el nombre de la aplicación por la oración que desee. Consulte este tutorial que puede ayudar:

    http://www.firstdroid.com/2010/08/04/adding-progress-bar-on-webview-android-tutorials/

    En ese tutorial tienes un ejemplo completo de cómo usar la barra de progreso en una aplicación de vista web.

    Adrian.

    Según la respuesta del Sr. Sajedul Karim , escribí uno similar.

     webView = (WebView) view.findViewById(R.id.web); progressBar = (ProgressBar) view.findViewById(R.id.progress); webView.setWebChromeClient(new WebChromeClient()); setProgressBarVisibility(View.VISIBLE); webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); setProgressBarVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); setProgressBarVisibility(View.GONE); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); Toast.makeText(getActivity(), "Cannot load page", Toast.LENGTH_SHORT).show(); setProgressBarVisibility(View.GONE); } }); webView.loadUrl(url); 

     private void setProgressBarVisibility(int visibility) { // If a user returns back, a NPE may occur if WebView is still loading a page and then tries to hide a ProgressBar. if (progressBar != null) { progressBar.setVisibility(visibility); } } 

    Así es como lo hice con Kotlin para mostrar el progreso con el porcentaje.

    Mi fragmento de diseño

         

    Mi fragmento kotlin en onViewCreated

      progressBar.max = 100; webView.webChromeClient = object : WebChromeClient() { override fun onProgressChanged(view: WebView?, newProgress: Int) { super.onProgressChanged(view, newProgress) progressBar.progress = newProgress; } } webView!!.webViewClient = object : WebViewClient() { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { progressBar.visibility = View.VISIBLE progressBar.progress = 0; super.onPageStarted(view, url, favicon) } override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { view?.loadUrl(url) return true } override fun shouldOverrideUrlLoading( view: WebView?, request: WebResourceRequest?): Boolean { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { view?.loadUrl(request?.url.toString()) } return true } override fun onPageFinished(view: WebView?, url: String?) { super.onPageFinished(view, url) progressBar.visibility = View.GONE } } webView.loadUrl(url) 

    espere hasta que el proceso termine …

     while(webview.getProgress()< 100){} progressBar.setVisibility(View.GONE); 
      webview= (WebView) findViewById(R.id.web); webview.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { WebActivity .setTitle("Loading..."); WebActivity .setProgress(progress * 100); if(progress == 100) WebActivity .setTitle(R.string.app_name); } }); webview.setWebViewClient(new WebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://google.com"); 

    Para obtener más información, haga clic aquí http://androiddhina.blogspot.in/2015/05/android-load-webview-with-progressbar.html