2011-11-17 18 views
5

Mam wyskakujące okno dialogowe, w którym ładuję widok WWW. Chcę wyświetlić pasek postępu, gdy przeglądarka internetowa ładuje się w górnej części okna podręcznego. Znalazłem sposób wyświetlania paska postępu ładowania podczas ładowania strony internetowej, ale jeśli ten widok sieciowy ładuje się w wyskakującym oknie dialogowym, pasek postępu nie jest wyświetlany na wierzchu. Czy ktoś może wyjaśnić, dlaczego tak się dzieje.Wyświetlanie paska postępu w wyskakującym okienku

Oto kod

[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]

To nie działa tak ja skomentował go.

link_popup.xml 

[kod]

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

[/ kod]

+0

Gdzie jest kod? – davidcesarino

Odpowiedz

0

alternatywnie U może ur aktywność wyglądać dialog używając to w pliku spisu zawartości: w znaczniku aktywności

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

a następnie możesz wyświetlić pasek postępu, używając async task w aktywności ur podczas wczytywania strony

nadzieję, że to pomaga

0

Klasa ta pojawi się okno zawierające webview że pokaże Spinner/Postęp każdym razem ładuje strony internetowej/strony internetowej.

/** 
* @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

Nie spojrzał na kodzie, ale jeśli spojrzeć na xml, masz RelativeLayout, a ProgessBar i WebView.

Po nadmuchaniu najpierw narysuje RelativeLayout, a następnie Progessbar, a na końcu WebView. Ponieważ WebView został fill_parent od szerokości i wysokości, ProgressBar pozostanie za 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

Nie Chcę dynamicznie wyświetlać pasek postępu, tak jak skomentowałem w moim kodzie. – James

0

No po pierwsze w względnym Układ element posisioned najbliżej dna w celu xml zostaną pokazane na Top. Musisz więc przenieść xml do paska postępu poniżej widoku webowego, aby zobaczyć pasek na górze widoku. W MyWebViewClient należy zastąpić onPageFinished i wewnątrz tej funkcji zmienić visibility paska postępu, aby zniknął. Możesz przekazać odnośnik do paska postępu do konstruktora dla ciebie MyWebViewClient, dzięki czemu można go użyć do ustawienia widoczności.

Przykład:

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

W kodzie Java, aby te zmiany:

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

zmienić na:

   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); 
        } 
       } 
       }); 
Powiązane problemy