Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在弹出窗口中显示进度条_Android - Fatal编程技术网

Android 在弹出窗口中显示进度条

Android 在弹出窗口中显示进度条,android,Android,我有一个弹出对话框,其中我正在加载一个网络视图。我想在webview加载到弹出窗口顶部时显示进度条。 我找到了一种在网页加载时显示加载进度条的方法,但是如果在弹出对话框中加载此webview,则进度条不会显示在其顶部。 有人能解释一下发生这种情况的原因吗 这是密码 [守则] @SuppressWarnings("static-access") public void showPopUp(String url){ try{ Dia

我有一个弹出对话框,其中我正在加载一个网络视图。我想在webview加载到弹出窗口顶部时显示进度条。 我找到了一种在网页加载时显示加载进度条的方法,但是如果在弹出对话框中加载此webview,则进度条不会显示在其顶部。 有人能解释一下发生这种情况的原因吗

这是密码

[守则]

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

它不工作,所以我评论它

link_popup.xml
[守则]

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

或者,您可以在清单文件中使用以下命令使您的活动看起来像一个对话框: 在活动标签中

  android:theme="@android:style/Theme.Dialog"
然后你可以在页面加载时,在你的活动中使用
async task
显示进度条


希望这有帮助

此类将显示一个包含webview的对话框,该对话框将在每次加载网页/网站时显示微调器/进度

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

我没有看过你的代码,但是如果你看一下xml,你有一个RelativeLayout,一个ProgesBar和一个WebView

当它膨胀时,它将首先绘制RelativeLayout,然后绘制ProgesBar,最后绘制WebView。由于您的webview在宽度和高度上都有填充,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>

首先,在相对布局中,XML顺序中最靠近底部的项目将显示在顶部。因此,您必须将进度条的XML移动到webview下方,以便可以看到webview顶部的进度条。在您的
MyWebViewClient
中,您应该重写该函数,并在该函数中将进度条的更改为
GONE
。您可能希望将对进度条的引用传递到构造函数中,以便
MyWebViewClient
可以使用它将可见性设置为
GONE

例如:

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

    }

在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);
                   }
                 }
               });
使用“进度”对话框, 检查这几页 还是这个

否我想在代码中注释时动态显示进度条。