显示带有对话框进度和网络客户端的webview客户端
我的应用程序有webview,我添加进度对话框显示加载,直到web加载完成。我在谷歌搜索,并得到了很好的解决方案显示带有对话框进度和网络客户端的webview客户端
wv.setWebChromeClient(new MyWebChromeClient());
wv.setWebViewClient(new MyWebViewClient());
wv.loadUrl("http://www.google.com");
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
alertdialog.setTitle("Error");
alertdialog.setMessage(description);
alertdialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//return;
finish();
}
});
alertdialog.show();
}
}
private class MyWebChromeClient extends WebChromeClient {
@Override
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();
}
}
但我的问题是,如何让progressdialog只出现一次后,我推出来,因为现在如果我点击例如像图像(在google.com),进程对话框将再次出现。
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.info);
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setMessage("Please wait...");
mProgressDialog.setCancelable(false);
mProgressDialog.setMax(100);
mProgressDialog.show();
WebView webView = (WebView) findViewById(R.id.webview);
webView.setVisibility(View.VISIBLE);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, final int progress)
{
activity.setTitle("Loading...");
activity.setProgress(progress * 100);
mProgressDialog.setProgress(progress);
if(progress == 100)
{
activity.setTitle(R.string.app_name);
mProgressDialog.dismiss();
}
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
webView.loadUrl("http://www.google.com");
当页面为loading
时,请检查以下代码,将显示屏progressbar
转换为webview。
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.newsdisplay);
getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
newswebview = (WebView) findViewById(R.id.news_webView);
newswebview.setWebViewClient(new WebViewClient());
WebSettings webSettings = newswebview.getSettings();
webSettings.setJavaScriptEnabled(true);
newswebview.getSettings().setSupportZoom(true); //Zoom Control on web (You don't need this
//if ROM supports Multi-Touch
newswebview.getSettings().setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM
newswebview.loadUrl(url);
final Activity MyActivity = this;
newswebview.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
//Make the bar disappear after URL is loaded, and changes string to Loading...
MyActivity.setTitle(" Loading...");
MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded
// Return the app name after finish loading
if(progress == 100)
MyActivity.setTitle(R.string.app_name);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK) && newswebview.canGoBack()) {
newswebview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
好吧我会尝试一下,并会给你一个反馈 – 2012-07-31 04:50:26
你的方式使用进度条,但我想使用prograssdialog不进度条 – 2012-07-31 04:54:16
//使用进度显示该代码的WebView
3210好吧将尝试它,并会给你一个feedbacl – 2012-07-31 04:51:09
你可以在屏幕上方显示进度条。 – iAndroid 2012-07-31 05:01:20
我不想显示进度条,我只想使用progressdialog,因为那是我的客户想要它@ _ @ – 2012-07-31 05:06:21
你可以试试下面的代码
view = (WebView) findViewById(R.id.WebView01);
view.setBackgroundColor(0); // set the background transparent
progressDialog = ProgressDialog.show(view.getContext(), "Loading...", "Loading...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER );
view.setWebChromeClient(new MyWebChromeClient());
view.getSettings().setJavaScriptEnabled(true);
view.setWebViewClient(new MyWebViewClient());
view.loadUrl("http://www.xxx.com/web/apps/jots.do");
然后创建类
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
}
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(progressDialog!=null){
if (newProgress >=80) {
progressDialog.dismiss();
} else {
progressDialog.setMessage(newProgress + " % loaded");
}
}
super.onProgressChanged(view, newProgress);
}
}
好吧我会尝试一下并给你一个反馈 – 2012-07-31 05:15:15
看到这个链接http://*.com/questions/8634319/how-to-set-different-title-for-alert-dialog-when-webview-page-is-loaded/9394561#9394561 – Sameer 2012-07-31 04:21:18
我试试你的链接和实现,但这不是我想要的,因为我不想让webview看起来像弹出。 – 2012-07-31 04:49:46