您的位置:首页 > 移动开发

Android webview使用详解

2016-10-31 17:01 375 查看
1.概览:

Android WebView在Android平台上是一个特殊的View, 他能用来显示网页,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器。WebView内部实现是采用渲染引擎来展示view的内容,提供网页前进后退,网页放大,缩小,搜索,前端开发者可以使用web inspector(Android 4.4系统支持,4.4一下可以采用http://developer.android.com/guide/webapps/debugging.html)调试HTML,CSS,JavaScript等等功能。在Android 4.3系统及其一下WebView内部采用Webkit渲染引擎,在Android 4.4采用chromium 渲染引擎来渲染View的内容。

2.WebView基本使用方法使用方法

(1).首先对Webview实例化:

WebView webview = new WebView(this);
4000
setContentView(webview);


(2)在xml中配置WebView

<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>


(3)你需要在需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。

<uses-permission android:name="android.permission.INTERNET" />


(4)加上你需要访问的链接 :

webview.loadUrl("http://www.baidu.com/");


3.WebView常用属性

public void initview(){
webView = (WebView) findViewById(R.id.webview);
if(Build.VERSION.SDK_INT >= 19) {
webView.getSettings().setLoadsImagesAutomatically(true);
} else {
webView.getSettings().setLoadsImagesAutomatically(false);
}
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
// 启用支持javascript
webView.getSettings().setJavaScriptEnabled(true);

webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
//支持缩放
webView.getSettings().setSupportZoom(true);
//启用数据库
webView.getSettings().setDatabaseEnabled(true);
//设置定位的数据库路径
String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
webView.getSettings().setGeolocationDatabasePath(dir);
//启用地理定位
webView.getSettings().setGeolocationEnabled(true);
//编码格式
webView.getSettings().setDefaultTextEncodingName("utf-8");
// 开启 DOM storage API 功能
webView.getSettings().setDomStorageEnabled(true);
//调用引用js交互方法
webView.addJavascriptInterface(new javascriptobject(), "myObj");

webView.setWebViewClient(new WebViewClient() {
// 点击超链接的时候重新在原来进程上加载URL
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
// webview加载完成
@Override
public void onPageFinished(WebView view, String url) {
progressBar.setVisibility(View.GONE);
// progressBar.setVisibility(View.VISIBLE);
}
//得到正在加载的页面的title:
@Override
public void onReceivedTitle(WebView view, String title) {
titleview.setText(title);//a textview
}
//错误页面加载的方法
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
webView.loadUrl("file:///android_asset/unnetwork.html");
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
//定位权限
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
}
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
});
webView.loadUrl(url);
)
//设置回退
//覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack(); //goBack()表示返回WebView的上一页面
return true;
}
return false;
   }


4.JS交互的方法

/*
* js交互方法�
* */
public class javascriptobject {
@JavascriptInterface
public void fun1FromAndroid(String s) {
mhandler.sendEmptyMessage(0);
}
}




5.缓存五种方式

LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据
LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
如:www.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。


好了,今天就说这么多。如有不明白的地方或者有好的建议 欢迎加QQ;2585760090
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android