2010-10-11 20 views
31

Estoy tratando de abrir una página web en mi aplicación usando WebView. Cuando abro la página web, me muestra la pantalla en blanco por un momento y luego abro esa página en el navegador dentro de mi aplicación.cómo mostrar la barra de progreso en la vista web?

¿Alguien me sugiere cómo mostrar el progreso o deshacerse de esa pantalla en blanco que aparece durante la carga de la vista web?

estoy usando siguiente código:

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

posible duplicado de [Android barra de progreso WebView] (http://stackoverflow.com/questions/2537454/android-webview-progress -bar) –

Respuesta

40

Prueba esto:

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

funciona para mí también :) – sunil

+0

cuando hago clic en la URL abierta a través de la aplicación de Chrome. Pero quiero abrirlo en mi vista web con la barra de progreso de la línea. –

+5

Window.FEATURE_PROGRESS está en desuso – amorenew

10

Es necesario hacer algo como esto:

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

Y luego

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

actualización
Sé que es un poco tarde pero tengo poco nota al margen: no debe usar setWebViewClient() dos veces. La segunda llamada cancela la primera llamada para que no reciba el manejo de errores.

+0

gracias ambos trabajando :) – UMAR

3

1. En alcrear ur AsyncTask llamada.

2. En asynctask, simplemente haga el diálogo de progreso y muestre el diálogo de progreso.

3. En vista web cliente u sólo mostrar clic de diálogo nuevo progreso en cualquier enlace de la página web que se abren en vista web ur y después de la relación de carga completa que reemplazar el métodoonPageFinished y en este método que descartar el progreso diálogo.

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

Este es el código que estoy usando:

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

}); 

Aquí es 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 ..

0

Aquí está el código que estoy usando en 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" 
} 
Cuestiones relacionadas