2011-11-17 98 views
5

我有一个弹出对话框,在其中加载web视图。我想在webview加载到弹出窗口的顶部时显示progressBar。 我发现了一种在网页加载时显示加载进度条的方法,但是如果此webview在弹出对话框中加载,progressBar不会显示在其上方。 有人可以解释为什么会发生这种情况。在弹出窗口中显示progressBar

下面是代码

[代码]

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

[/代码]

它不工作,所以我评价它。

link_popup.xml 

[代码]

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

[/代码]

+0

代码在哪里? – davidcesarino

回答

0

可替代地,U可以使乌尔活动清单文件使用这看起来像一个对话框:在活动标签

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

然后你可以显示进度条,在你的活动中使用async task而页面加载

希望这有助于

0

这个类将显示包含网页视图,将每次被加载网页/网站时显示一个微调/进程的对话框。

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

我没有看过你的代码,但如果你看看XML,你有一个RelativeLayout的,一个ProgessBar和web视图。

当它膨胀时,它将首先绘制RelativeLayout,而不是你的Progessbar,最后是你的WebView。由于您的网页流量已经在宽度和高度FILL_PARENT的进度将保持的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

不,我想在我的代码中注释时动态显示进度条。 – James

0

好第一关在一个相对布局posisioned最接近底部的XML订单,该项目将在显示最佳。所以你必须把你的进度条的xml移到webview下面,这样你才能看到webview顶部的栏。在您的MyWebViewClient中,您应该覆盖onPageFinished,并且在该功能中将进度条的visibility更改为消失。您可能希望将对进度条的引用传递给您的MyWebViewClient的构造函数,以便它可用于将可见性设置为消失。

例子:

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

在Java代码中,进行这些更改:

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

更改为:

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