本文主要讲解WebView的一些常用使用方法
代码如下:
xml文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:orientation
=
"vertical"
>
<
WebView
android:id
=
"@+id/webView1"
android:layout_width
=
"match_parent"
android:layout_height
=
"0dip"
android:layout_weight
=
"1"
/>
<
ProgressBar
android:id
=
"@+id/progressBar1"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_gravity
=
"center_horizontal"
/>
</
LinearLayout
>
|
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
1
2
3
4
5
6
|
webView.setWebViewClient(
new
WebViewClient() {
public
boolean
shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return
true
;
}
});
|
4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
1
2
3
4
5
6
7
|
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
if
((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return
true
;
}
return
super
.onKeyDown(keyCode, event);
}
|
5.android中webview支持javascript自定义对象
a.设置webview支持javascript. webSettings.setJavaScriptEnabled(true);
b.绑定android对象到javascript对象. addJavascriptInterface(Object obj,String interfaceName);
c.页面中调用javascript对象. javascript:window.demo.方法名称();
在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
class
WebViewDemo
extends
Activity {
private
WebView mWebView;
private
Handler mHandler =
new
Handler();
public
void
onCreate(Bundle icicle) {
super
.onCreate(icicle);
setContentView(R.layout.webviewdemo);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(
true
);
mWebView.addJavascriptInterface(
new
Object() {
public
void
clickOnAndroid() {
mHandler.post(
new
Runnable() {
public
void
run() {
mWebView.loadUrl(
"javascript:wave()"
);
}
});
}
},
"demo"
);
mWebView.loadUrl(
"file:///android_asset/demo.html"
);
}
}
|
6.WebView控制进度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
webView.setWebChromeClient(
new
WebChromeClient() {
public
void
onProgressChanged(WebView view,
int
progress) {
setTitle(
"页面加载中,请稍候..."
+ progress +
"%"
);
setProgress(progress *
100
);
if
(progress ==
100
) {
setTitle(R.string.app_name);
progressBar.setVisibility(
4
);
}
}
});
|
最后把MainActivity的代码贴上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package
com.example.webviewdemo;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.KeyEvent;
import
android.view.Menu;
import
android.webkit.WebChromeClient;
import
android.webkit.WebView;
import
android.webkit.WebViewClient;
import
android.widget.ProgressBar;
public
class
MainActivity
extends
Activity {
WebView webView;
ProgressBar progressBar;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
webView.getSettings().setJavaScriptEnabled(
true
);
webView.loadUrl(
"https://m.empireblue.com/mobile/providerfinder/home"
);
webView.setWebViewClient(
new
WebViewClient() {
public
boolean
shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return
true
;
}
});
webView.setWebChromeClient(
new
WebChromeClient() {
public
void
onProgressChanged(WebView view,
int
progress) {
setTitle(
"页面加载中,请稍候..."
+ progress +
"%"
);
setProgress(progress *
100
);
if
(progress ==
100
) {
setTitle(R.string.app_name);
progressBar.setVisibility(
4
);
}
}
});
}
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
if
((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return
true
;
}
return
super
.onKeyDown(keyCode, event);
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return
true
;
}
}
|