WebView之加载网页时增加进度提示
2014-02-24 17:31
387 查看
上一节讲了一些webview的基本使用以及在记载网页时如何屏蔽掉第三方浏览器,使我们自己开发的程序成为一个微型浏览器。那么这一节将一下在webView加载网页的过程中如何加上进度提示。效果图如下:
主要代码:
当网页加载时我们希望看到进度条,当网页加载完成时取消进度条。实时的显示进度是在WebViewChromeClient类只能够设置的。这个类提供了一个onProgressChanged(WebView view, int newProgress) (newProgress的最大值是100最小值为0)方法用于更新进度条
代码如下:
下面贴出完整的代码:
一、布局文件:
其中progressbar用于显示进度条,webview用于显示加载的网页
二、主类,上面我都加了详细的注释,如果那里不明白可以看看注释,这里就不再赘述了。直接上代码。
主要代码:
当网页加载时我们希望看到进度条,当网页加载完成时取消进度条。实时的显示进度是在WebViewChromeClient类只能够设置的。这个类提供了一个onProgressChanged(WebView view, int newProgress) (newProgress的最大值是100最小值为0)方法用于更新进度条
代码如下:
//显示进度 webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { Log.e("newProgress", newProgress+""); progressBar.setProgress(newProgress); if(newProgress >= 100){ progressBar.setVisibility(View.GONE); } // super.onProgressChanged(view, newProgress); } });
下面贴出完整的代码:
一、布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ProgressBar android:id="@+id/index_progressBar" android:layout_width="fill_parent" android:layout_height="5dp" style="?android:attr/progressBarStyleHorizontal" android:progress="0" android:visibility="visible" android:secondaryProgress="0" /> <WebView android:id="@+id/index_webView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
其中progressbar用于显示进度条,webview用于显示加载的网页
二、主类,上面我都加了详细的注释,如果那里不明白可以看看注释,这里就不再赘述了。直接上代码。
package cn.yw.sol;
import cn.yw.sol.R;
import cn.yw.sol.view.SOLWebView;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
/**
* webkit simple demo
* @author tony
*
*/
public class MainActivity extends Activity{
private WebView webView;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.index);
webView = (WebView)findViewById(R.id.index_webView);//实例化webview对象
progressBar = (ProgressBar)findViewById(R.id.index_progressBar);
//设置webview属性能够执行javascript脚本
webView.getSettings().setJavaScriptEnabled(true);
//设置webView可以缩放,只可以双击缩放
webView.getSettings().setSupportZoom(true);
//设置是否可缩放
webView.getSettings().setBuiltInZoomControls(true);
//无限缩放
webView.getSettings().setUseWideViewPort(true);
//加载需要显示的网页
webView.loadUrl("http://www.baidu.com/");
/**
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
*/
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
progressBar.setVisibility(View.VISIBLE);
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
//显示进度 webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { Log.e("newProgress", newProgress+""); progressBar.setProgress(newProgress); if(newProgress >= 100){ progressBar.setVisibility(View.GONE); } // super.onProgressChanged(view, newProgress); } });
}
//如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身
//,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();//退回到上一个页面
return true;
}
return super.onKeyDown(keyCode, event);
}
}
相关文章推荐
- mtk android settings
- iOS学习之二十:应用的归档打包以及distribution测试和上传到App Store
- Android进程与线程详解
- cocos2dx常见的46中+22中动作详解
- nagios+CENTREON的安装
- static struct QMetaObject const QwtPlot::staticMetaObjec
- static struct QMetaObject const QwtPlot::staticMetaObjec
- iOS小技巧--xml 中文乱码
- android 4.4.2 (ART模式)子线程中调用GetFieldID返回0
- 创建自定义的Cocos2d-x场景
- Android Activity学习笔记——Activity的启动和创建
- Delphi对象池MyObjectPool.pas
- org.hibernate.NonUniqueObjectException两种解决方法
- Android NDK开发----- Java与C互相调用实例详解
- Unity3D: JavaScript->C# 或 C#->JavaScript的调用
- WebView之禁止调用第三方浏览器
- iOS 保存图片或视频到PhotoLibrary
- objective-c宏定义
- 终止Android中HandlerThread的方法
- android.view.ViewGroup$LayoutParams cannot be cast to android.widget.TableRow$LayoutParams