访问权限

调用第三方或者系统默认浏览器不需要使用网络访问权限,但是自己写WebView访问网络资源需要配置网络访问权限。

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

使用loadUrl()

web资源: webView.loadUrl(“http://www.bing.com");

本地文件:webView.loadUrl(“file:///android_asset/xx.html”);

本地文件放在 asset文件夹中

//使页面获得焦点
webView.requestFocus();

处理页面导航

当用户点击webView中的链接时,通常由默认浏览器打开并加载目标url,需要覆盖该默认处理方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回True的时候控制网页在WebView中打开
//返回False控制网页在默认浏览器中打开。
view.loadUrl(url);
return true;
}

//WebViewClient帮助WebView处理一些页面控制和请求通知,还有其它很多方法,如下

@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);
}
});

WebView使用Javascript

1
2
WebSettings settings=webView.getSettings();
settings.setJavaScriptEnabled(true);

设置返回键逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if(webView.canGoBack()){
Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show();
webView.goBack();//返回上一界面
return true;
}
}else{
System.exit(0);
}
return super.onKeyDown(keyCode, event);
}

判断加载页面过程

使用本地缓存

1
WebSettings settings=webView.getSettings();   settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="0dp"
android:paddingRight="0dp" >

<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<WebView
android:id="@+id/webView"
android:layout_below="@id/progressBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"></WebView>
</RelativeLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
//网页已经加载完毕
progressCompleted();
} else {
//网页正在加载
progressUnCompleted(newProgress);
}
}

private void progressCompleted(){
progressBar.setProgress(100);
}

private void progressUnCompleted(int newProgress){
progressBar.setProgress(newProgress);
}
});