Android Web视图上的ProgressDialog显示为灰色

Android Web视图上的ProgressDialog显示为灰色,android,webview,android-alertdialog,progressdialog,Android,Webview,Android Alertdialog,Progressdialog,我的Android应用程序中有一个WebView,它显示一个带有特定URL的网页。URL是应用程序关闭WebView并执行其他操作的信号 我想在应用程序加载URL所需的功能时,在WebView上显示ProgressDialog。但是,当ProgressDialog出现时,它会变暗,好像有一个叠加在它上面的叠加。显示AlertDialog将正常显示。有人能告诉我为什么PD会变暗吗 private class WebView extends WebViewClient { @Override

我的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;
    }
}

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

因为

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

}
在这个重写方法中,有一个paramiter
WebView
,它是在android中从
android.webkit
包构建的类

如果保留类名
WebView
,这意味着不重写方法表单
WebViewClient
应该重写,否则它将不起作用

然后 您可以覆盖
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”)
为true。否则它永远不会执行…因为如果(false)永远不会执行。。。在这种情况下,如果您的代码中有..

您的私有内部类名是需要更改的
WebView
,则将执行else部分。 它可以是
MyWebView
或其他任何东西。但不应
WebView

因为

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

}
在这个重写方法中,有一个paramiter
WebView
,它是在android中从
android.webkit
包构建的类

如果保留类名
WebView
,这意味着不重写方法表单
WebViewClient
应该重写,否则它将不起作用

然后 您可以覆盖
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”)
为true。否则它永远不会执行…因为如果(false)永远不会执行。。。在这种情况下,如果使用..

在webview中显示进度,则将执行else部分,使用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);
        }

    }
}

为了在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);
        }

    }
}

使用明亮的颜色显示进度,或者您可以将其提升到每层上方的顶部。使用明亮的颜色显示进度,或者您可以将其提升到每层上方的顶部