在弹出窗口中显示progressBar

时间:2011-11-17 16:23:02

标签: android

我有一个弹出对话框,我在其中加载webview。我想在webview加载到弹出窗口的顶部时显示progressBar。 我已经找到了一种在网页加载时显示加载进度条的方法,但如果在弹出的对话框中加载了这个webview,则不会在其上显示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>

[/代码]

6 个答案:

答案 0 :(得分:2)

我没有看过你的代码,但如果你看一下xml,你就有了一个RelativeLayout,一个ProgessBar和一个WebView。

当它被夸大时,它将首先绘制RelativeLayout,而不是Progessbar,最后是WebView。由于您的webview在宽度和高度上都有fill_parent,因此ProgressBar将保留在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>

答案 1 :(得分:0)

或者,你可以使你的活动看起来像清单文件中使用它的对话框: 在活动标签

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

然后你可以在页面加载

时在你的活动中使用async task显示进度条

希望这会有所帮助

答案 2 :(得分: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();
        }
    }
}

答案 3 :(得分:0)

首先在相对布局中,在xml顺序中最靠近底部的项目将显示在顶部。因此,您必须在webview下方移动进度条的xml,以便在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);
        }

    }

答案 4 :(得分: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);
                   }
                 }
               });

答案 5 :(得分:0)