Android Web视图上的ProgressDialog显示为灰色
我的Android应用程序中有一个WebView,它显示一个带有特定URL的网页。URL是应用程序关闭WebView并执行其他操作的信号 我想在应用程序加载URL所需的功能时,在WebView上显示ProgressDialog。但是,当ProgressDialog出现时,它会变暗,好像有一个叠加在它上面的叠加。显示AlertDialog将正常显示。有人能告诉我为什么PD会变暗吗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
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) {
}
在这个重写方法中,有一个paramiterWebView
,它是在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) {
}
在这个重写方法中,有一个paramiterWebView
,它是在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);
}
}
}
使用明亮的颜色显示进度,或者您可以将其提升到每层上方的顶部。使用明亮的颜色显示进度,或者您可以将其提升到每层上方的顶部