【问题标题】:show progress dialog on webview在 webview 上显示进度对话框
【发布时间】:2011-02-14 03:47:37
【问题描述】:

在我的 android 应用程序中,我正在打开一个 webview。我想隐藏正在加载的 url,因此默认窗口进度条对我不起作用。

还有什么办法可以让我在 webview 上添加进度对话框。

我正在使用下面的代码。

 mWebView = (WebView) findViewById(R.id.webview);
     mWebView.getSettings().setJavaScriptEnabled(true); 

     final Activity activity = this; 

     mWebView.setWebChromeClient(new WebChromeClient(){ 

     public void onProgressChanged(WebView view, int progress) { 
     activity.setTitle("Loading..."); 
     activity.setProgress(progress * 100); 
     if(progress == 100) 
     activity.setTitle("My title"); 
     } 
     }); 

     mWebView.loadUrl(Url);
     mWebView.setWebViewClient(new HelloWebViewClient());
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

}

private class HelloWebViewClient extends WebViewClient {   
    ProgressDialog MyDialog=new ProgressDialog(context);

    public boolean shouldOverrideUrlLoading(WebView view, String url) {    
        MyDialog.show();  
        view.loadUrl(url);  
        return true;  
         }

请分享您的宝贵建议。

提前致谢:)

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您通过“android:theme="@android:style/Theme.NoTitleBar"” 从清单中隐藏应用程序标题,那么您将看不到此代码在标题中显示的进度条:

        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);               
        setContentView(R.layout.main);
    
    // Makes Progress bar Visible
    getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
    

    因此您可以在 onCreate() 中显示带有这样的对话框的进度条:

    final Activity activity = this;
    
    final ProgressDialog progressDialog = new ProgressDialog(activity);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setCancelable(false);
    
    browser.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            progressDialog.show();
            progressDialog.setProgress(0);
            activity.setProgress(progress * 1000);
    
            progressDialog.incrementProgressBy(progress);
    
            if(progress == 100 && progressDialog.isShowing())
                progressDialog.dismiss();
        }
    });
    

    【讨论】:

    • 谢谢,这正是人们想要的!
    • 像魅力一样工作。谢谢..你能指导一下..但是我怎样才能只显示一次进度条..只有在应用程序加载后的每次点击时才显示
    • 为什么要为activity和progressDialog设置progressDialog?看起来你在做同样的事情两次?虽然效果很好
    【解决方案2】:

    由于 ProgressDialog 在 API 级别 26 (Oreo) 中已弃用我将展示如何使用 ProgressBar WebView

    第 1 步)使用 WebView 和 ProgressBar 创建一个 FrameLayout,如下所示:

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/fl"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ProgressBar
            android:id="@+id/progress"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="8dp"
            android:visibility="gone" />
        <WebView
            android:id="@+id/web_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone" />
    </FrameLayout>
    

    第 2 步)在 onCreate() 中添加以下代码,如下所示:

        progressBar = findViewById(R.id.progress);
        webView = findViewById(R.id.web_view);
    
        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int newProgress) {
    
                // Keep WebView hidden when the url is loading
                webView.setVisibility(View.INVISIBLE);
    
                // Make ProgressBar visible
                progressBar.setVisibility(View.VISIBLE);
                progressBar.setProgress(0);
                progressBar.incrementProgressBy(newProgress);
    
                if(newProgress == 100 && progressBar.getVisibility() == View.VISIBLE) {
                   // Make ProgressBar invisible and WebView visible
                    progressBar.setVisibility(View.INVISIBLE);
                        webView.setVisibility(View.VISIBLE);
                    }
        }});
    
        webView.loadUrl(URL);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多