2011-11-17 28 views
5

Tengo un cuadro de diálogo emergente en el que estoy cargando una vista web. Quiero mostrar un progressBar mientras la vista web se está cargando en la parte superior de la ventana emergente. He encontrado una manera de mostrar la barra de progreso de carga mientras se carga la página web, pero si esta vista web se está cargando en el cuadro de diálogo emergente, la barra de progreso no se muestra en la parte superior. ¿Alguien puede explicar la razón por la que esto está sucediendo?Mostrando una barra de progreso en una ventana emergente

Este es el código

[code]

@SuppressWarnings("static-access") 
    public void showPopUp(String url){ 
      try{ 

       Dialog dialog = new Dialog(Links.this); 
       LayoutInflater inflater = (LayoutInflater)getSystemService(Links.this.LAYOUT_INFLATER_SERVICE); 
       View vi = inflater.inflate(R.layout.link_popup, null); 
       dialog.setContentView(vi); 
       dialog.setTitle("Title here"); 
       dialog.setCancelable(true); 
       WebView wb = (WebView) vi.findViewById(R.id.WebView01); 

       wb.setWebViewClient(new MyWebViewClient()); 
       wb.getSettings().setJavaScriptEnabled(true); 
       wb.getSettings().setSupportZoom(true);  
       wb.loadUrl(url); 
//    final Activity MyActivity = this; 
//    
//    progressDialog = ProgressDialog.show(dialog.getOwnerActivity(), "", "Loading....", true); 
//    
//    wb.setWebChromeClient(new WebChromeClient() { 
//    public void onProgressChanged(WebView view, int progress) 
//    { 
//     MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded 
//     if(progress == 100){ 
//     if(progressDialog.isShowing()) 
//       progressDialog.dismiss(); 
//     } 
//     } 
//    }); 

       System.out.println("..loading url.."); 
       dialog.show(); 

      }catch(Exception e){ 
       System.out.println("Exception while showing Agreement : " + e.getMessage()); 
      } 
     } 

[/ code]

No estaba funcionando así que comenté.

link_popup.xml 

[code]

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="fill" 
android:id="@+id/layout_root" 
android:background="#000000" 
> 

     <ProgressBar 

      android:layout_width="fill_parent" 
      android:layout_height="5dip" 
      android:layout_alignParentTop="true" 
      style="?android:attr/progressBarStyleHorizontal" 
      android:id="@+id/progressbar_Horizontal" 
      android:max="100" 
      android:background="#228b22" 
     /> 
     <WebView 
      android:id="@+id/WebView01" 
      android:layout_below="@id/progressbar_Horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_centerVertical="true" 
      android:layout_centerInParent="true" 
      android:scrollbars="@null" 
      /> 
</RelativeLayout> 

[/ code]

+0

¿Dónde está el código? – davidcesarino

Respuesta

0

alternativamente, u puede hacer ur actividad aparecerá como un cuadro de diálogo con esto en el archivo de manifiesto: en la etiqueta de la actividad

android:theme="@android:style/Theme.Dialog" 

y luego puede mostrar la barra de progreso, usando async task en su actividad mientras se carga la página

esperanza esto ayuda

0

Esta clase se mostrará un cuadro de diálogo que contiene una vista web que mostrará una ruleta/progreso cada vez que se carga una página web/página web.

/** 
* @author Sherif 
* 
* Copyright 2011 
* 
* Dialog that will enable web browsing with a progress dialog. 
* 
*/ 

import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.res.Configuration; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.view.Display; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.FrameLayout; 
import android.widget.LinearLayout; 

public class MyLovelyDialog extends Dialog { 
    static final float[] DLANDSCAPE = {20, 60}; 
    static final float[] DPORTRAIt = {40, 60}; 
    static final FrameLayout.LayoutParams mFrameLayoutParams = 
     new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 
         ViewGroup.LayoutParams.FILL_PARENT); 
    private String mUrl; 
    private ProgressDialog mProgressDialog; 
    private WebView mWebView; 
    private LinearLayout mLinearLayout; 

    public MyLovelyDialog(Context context, String url) { 
     super(context); 
     mUrl = url; 
    } 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setUpProgressDialog(); 
     setUpContent(); 
     setUpWebView(); 
     setUpDisplay(); 
    } 
    private void setUpProgressDialog() { 
     mProgressDialog = new ProgressDialog(getContext()); 
     mProgressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     mProgressDialog.setMessage("Loading..."); 
    } 
    private void setUpContent() { 
     mLinearLayout = new LinearLayout(getContext()); 
     mLinearLayout.setOrientation(LinearLayout.VERTICAL); 
    } 
    private void setUpDisplay() { 
     Display display = getWindow().getWindowManager().getDefaultDisplay(); 
     final float scale = 
      getContext().getResources().getDisplayMetrics().density; 
     int orientation = 
      getContext().getResources().getConfiguration().orientation; 
     float[] dimensions = 
      (orientation == Configuration.ORIENTATION_LANDSCAPE) 
        ? DLANDSCAPE : DPORTRAIt; 
     addContentView(mLinearLayout, new LinearLayout.LayoutParams(
       display.getWidth() - ((int) (dimensions[0] * scale + 0.5f)), 
       display.getHeight() - ((int) (dimensions[1] * scale + 0.5f)))); 
    } 
    private void setUpWebView() { 
     mWebView = new WebView(getContext()); 
     mWebView.setVerticalScrollBarEnabled(false); 
     mWebView.setHorizontalScrollBarEnabled(false); 
     mWebView.setWebViewClient(new MyLovelyDialog.MyLovelyWebViewClient()); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl(mUrl); 
     mWebView.setLayoutParams(mFrameLayoutParams); 
     mLinearLayout.addView(mWebView); 
    } 
    private class MyLovelyWebViewClient extends WebViewClient { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      mProgressDialog.show(); 
     } 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      mProgressDialog.dismiss(); 
     } 
    } 
} 
2

No he mirado a su código, pero si nos fijamos en el xml, tiene un RelativeLayout, un ProgessBar y una vista Web.

Cuando está inflado, primero dibujará RelativeLayout, que su Progessbar, y finalmente su WebView. Debido a que su vista web ha fill_parent de la anchura y la altura, ProgressBar permanecerá detrás de la WebView ...

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="fill" 
    android:id="@+id/layout_root" 
    android:background="#000000"> 

    <!-- First the WebView --> 
    <WebView 
     android:id="@+id/WebView01" 
     android:layout_below="@id/progressbar_Horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerVertical="true" 
     android:layout_centerInParent="true" 
     android:scrollbars="@null" 
     /> 

     <!-- Than the Progessbar on top of it --> 
     <ProgressBar 
     android:layout_width="fill_parent" 
     android:layout_height="5dip" 
     android:layout_alignParentTop="true" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:id="@+id/progressbar_Horizontal" 
     android:max="100" 
     android:background="#228b22" 
    /> 
</RelativeLayout> 
+0

No Quiero mostrar una barra de progreso dinámicamente como comenté en mi código. – James

0

Bueno, primero en una disposición relativa al artículo posisioned más cerca de la parte inferior en el orden xml se mostrará en parte superior. Por lo tanto, debe mover el xml de la barra de progreso debajo de la vista web para que pueda ver la barra en la parte superior de la vista web. En su MyWebViewClient debe anular onPageFinished y dentro de esa función cambiar el visibility de la barra de progreso a desaparecido. Es posible que desee pasar una referencia a la barra de progreso en el constructor para MyWebViewClient, de modo que se pueda usar para establecer que la visibilidad haya desaparecido.

Ejemplo:

public class MyWebViewClient extends WebViewClient { 

     private ProgressBar pBar; 

     public MyWebViewClient(ProgressBar pBar) 
     { 
      super(); 
      this.pBar = pBar; 
     } 

     @Override 
     public void onPageFinished (WebView view, String url) 
     { 
      super.onPageFinished(view, url); 
      pBar.setVisibility(View.GONE); 
     } 

    } 
0

En su código java, hacer estos cambios:

//    progressDialog = ProgressDialog.show(dialog.getOwnerActivity(), "", "Loading....", true); 
//    
//    wb.setWebChromeClient(new WebChromeClient() { 
//    public void onProgressChanged(WebView view, int progress) 
//    { 
//     MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded 
//     if(progress == 100){ 
//     if(progressDialog.isShowing()) 
//       progressDialog.dismiss(); 
//     } 
//     } 
//    }); 

Cambiar a:

   progressDialog = (ProgressDialog) vi.findViewById(R.id.progressbar_horizontal); 

       wb.setWebChromeClient(new WebChromeClient() { 
       public void onProgressChanged(WebView view, int progress) 
       { 
        progressDialog.setProgress(progress * 100); //Make the bar disappear after URL is loaded 
        if(progress == 100){ 
        if(progressDialog.isShowing()) 
          progressDialog.setVisibility(View.GONE); 
        } 
       } 
       }); 
Cuestiones relacionadas