【问题标题】:ProgressDialog over a WebView appears dimmedWebView 上的 ProgressDialog 显示为灰色
【发布时间】:2017-07-13 03:43:33
【问题描述】:

我的 Android 应用中有一个 WebView,它显示一个带有特定 URL 的网页。 URL 是应用程序关闭 WebView 并执行其他操作的信号。

我想在应用加载 URL 所需的功能时在 WebView 上显示 ProgressDialog。但是,当 ProgressDialog 出现时,它会变暗,就好像上面叠加了一个叠加层。正常显示 AlertDialog。谁能告诉我为什么 PD 看起来变暗了?

private class WebView extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, final String url) {
        if (url.contains("my/special/url")) {
            // ProgressDialog message appears dimmed
            ProgressDialog progress;
            progress = new ProgressDialog(view.getContext());
            progress.setMessage("Loading...");
            progress.show();
            progress.setCancelable(false);
            progress.setCanceledOnTouchOutside(false);

            // AlertDialogs appear as normal
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            AlertDialog dialog;
            builder.setMessage("Loading");
        }

        return true;
    }
}

【问题讨论】:

  • 使用明亮的颜色来显示进度,或者您可以将其提升到顶部android:elevation="20dp" 每一层的上方

标签: android webview android-alertdialog progressdialog


【解决方案1】:

在您的代码中,您的私有内部类名称是WebView,需要更改。 它可能是MyWebView 或其他任何东西。但不应该WebView

因为,

@Override
public boolean shouldOverrideUrlLoading(WebView view, final String url) {

}

在这个覆盖方法中有一个参数WebView,它是在android.webkit包的android类中构建的。

如果你保留你的类名WebView,这意味着你没有覆盖WebViewClientshouldOverrideUrlLoading的方法,它不会起作用。

那么

您可以覆盖onPageStarted 以显示您的进度对话框 因为它会在加载页面时调用......

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);

        if (url.contains("my/special/url")) {
            // ProgressDialog message appears dimmed
            ProgressDialog progress;
            progress = new ProgressDialog(view.getContext());
            progress.setMessage("Loading...");
            progress.show();
            progress.setCancelable(false);
            progress.setCanceledOnTouchOutside(false);

            // AlertDialogs appear as normal
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            AlertDialog dialog;
            builder.setMessage("Loading..");
        }
    }

您必须确保if (url.contains("my/special/url")) 为真。否则它永远不会执行...因为 if(false) 永远不会执行...在这种情况下 else 部分将执行 if have..

【讨论】:

    【解决方案2】:

    为了在 webview 中显示进度,使用了 WebViewChromeClient。尝试使用以下示例实现 webview。希望它能解决你的问题。

    public class webView extends AppCompatActivity {
        private String mUrl;
        public WebView mWebView;
        // public ProgressBar progressBar;
        private ProgressBar progressBar;//
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.web_view);
            Log.e("Webview class", "I'm in web view");
    
            progressBar = (ProgressBar) findViewById(R.id.progress_bar);
            //set progress bar max limit
            progressBar.setMax(100);
            //get the url from the intent of this activity called from the fragments
            mUrl = getIntent().getExtras().getString("url");
            // set the title of webview to be th url
            setTitle(mUrl);
            mWebView = (WebView) findViewById(R.id.webview);
            //mWebView = new WebView(this);
            mWebView.setWebViewClient(new myWebViewClient());
            mWebView.setWebChromeClient(new WebChromeClientDemo());
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.loadUrl(mUrl);
    
            //setContentView(mWebView);
    
        }
    
        private class myWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                progressBar.setVisibility(View.GONE);
                progressBar.setProgress(100);
            }
    
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                progressBar.setVisibility(View.VISIBLE);
                progressBar.setProgress(0);
            }
        }
    
        private class WebChromeClientDemo extends WebChromeClient {
            public void onProgressChanged(WebView view, int progress) {
                progressBar.setProgress(progress);
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-26
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2018-08-18
      相关资源
      最近更新 更多