studio progressbar progreso poner espera dialogo cargando carga barra bar android android-webview progressdialog android-progressbar

progressbar - progressdialog android studio



Agregar una barra de progreso en WebView (7)

Estoy intentando agregar una barra de progreso / carga a mi aplicación que usa WebView . Estoy confundido sobre cómo implementar una barra de progreso que aparece cada vez que se hace clic en un enlace.

Código actual:

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

Diseño de la actividad:

<?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>


Aquí está el código que estoy usando:

Dentro de 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); }

Aquí está el XML:

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

Espero que esto ayude..


El mejor enfoque que funcionó para mí es

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


Este link puede ayudarte.

He agregado algunas líneas en su código y ahora funciona bien con la barra de progreso.

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");


Ponga una barra de progreso y la vista web dentro de un diagrama de diseño relativo y establezca las propiedades para la barra de progreso de la siguiente manera:

  1. Haz que su visibilidad sea GONE.
  2. CENTRALO en la Relativelayout.

y luego en onPageStarted () del cliente web, haga visible la barra de progreso para que muestre la barra de progreso cuando ha hecho clic en un enlace. En onPageFinished () hace que la visibilidad de la barra de progreso sea GONE para que desaparezca cuando la página haya terminado de cargarse ... Esto funcionará bien para su escenario. Espero que esto ayude...


Puedes probar este código en tu actividad

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

Llame a este método de esta manera:

startWebView(web_view,"Your Url");

A veces, si la URL está muerta, se redireccionará y llegará a onLoadResource () antes del método onPageFinished. Por esta razón, la barra de progreso no se cerrará. Para resolver este problema, vea mi esta respuesta .

Gracias :)


en el método oncreate donde ha configurado su vista web.

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


pase su url en este método

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