本文实例讲述了android webview组件用法。分享给大家供大家参考,具体如下:
如果想webview能够访问网络,必须在androidmanifest.xml里面添加权限
1
|
<uses-permission android:name= "android.permission.internet" />
|
main.xml很简单,就是一个webview
1
2
3
4
5
6
7
8
9
10
|
<?xml version= "1.0" encoding= "utf-8" ?>
<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent"
android:orientation= "vertical" >
<webview
android:id= "@+id/webview"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent" />
</linearlayout>
|
webviewdemoactivity.java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package com.tianjf;
import android.app.activity;
import android.os.bundle;
import android.webkit.webview;
public class webviewdemoactivity extends activity {
private webview mwebview;
@override
public void oncreate(bundle savedinstancestate) {
super .oncreate(savedinstancestate);
setcontentview(r.layout.main);
mwebview = (webview) findviewbyid(r.id.webview);
// 得到websettings对象,设置支持javascript参数
// 如果访问的页面中有javascript,则webview必须设置支持javascript ,否则显示空白页面
mwebview.getsettings().setjavascriptenabled( true );
// 加载url
mwebview.loadurl( "http://www.baidu.com/" );
}
}
|
运行一下就会看到url被正确load出来了。
但是有个问题,当点击链接继续浏览,则会弹出系统默认的browser,为了能够继续在webview中浏览,要用到shouldoverrideurlloading方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@override
public void oncreate(bundle savedinstancestate) {
。。。。。。。。。。。。。。。。。。。。。。。。
// 虽然google主页在webview中显示了,但是如果点击链接继续浏览,则会显示到系统默认的browser中
// 为了继续在webview中显示,需要重写shouldoverrideurlloading方法
mwebview.setwebviewclient( new mywebviewclient());
。。。。。。。。。。。。。。。。。。。。。。。。
}
private class mywebviewclient extends webviewclient {
@override
public boolean shouldoverrideurlloading(webview view, string url) {
view.loadurl(url);
return true ;
}
}
|
另外,如果想按回退键回到上一个页面,那么
1
2
3
4
5
6
7
8
9
10
11
|
/**
* 按back键可以回到上个网页
*/
@override
public boolean onkeydown( int keycode, keyevent event) {
if ((keycode == keyevent.keycode_back) && mwebview.cangoback()) {
mwebview.goback();
return true ;
}
return super .onkeydown(keycode, event);
}
|
对于android 2.0开始又多出了一种新的方法,对于activity 可以单独获取back键的按下事件,直接重写onbackpressed 方法即可,代码如下
1
2
3
4
5
|
@override
public void onbackpressed() {
// 这里处理逻辑代码,该方法仅适用于2.0或更高版本的sdk
return ;
}
|
如果想加载工程中的html,那么可以用到下面的方法(前提是html放在assets目录中)
1
|
mwebview.loadurl( "file:///android_asset/test.html" );
|
如果想直接load一段html文,可以用下面的方法
1
|
mwebview.loaddata( "<html><body>abcdefg</body></html>" , "text/html" , "utf-8" );
|
下面是webview其他的一下用法:
设置允许访问文件数据
1
|
mwebview.getsettings().setallowfileaccess( true );
|
设置支持缩放
1
|
mwebview.getsettings().setbuiltinzoomcontrols( true );
|
设置是否保存密码
1
|
mwebview.getsettings().setsavepassword( false );
|
设置支持各种不同的设备
复制代码 代码如下:
mwebview.getsettings().setuseragentstring("mozilla/5.0 (ipad; u; cpu os 3_2 like mac os x;en-us) applewebkit/531.21.10 (khtml, like gecko) version/4.0.4 mobile/7b334bsafari/531.21.10");
加载webview网页时所要执行的一些方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
mwebview.setwebviewclient( new webviewclient() {
// 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示
@override
public boolean shouldoverrideurlloading(webview view, string url) {
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 onreceivederror(webview view, int errorcode,
string description, string failingurl) {
super .onreceivederror(view, errorcode, description, failingurl);
}
});
|
处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
mwebview.setwebchromeclient( new webchromeclient() {
// 提示对话框
@override
public boolean onjsalert(webview view, string url, string message,
final jsresult result) {
// 构建一个builder来显示网页中的alert对话框
builder builder = new builder(webviewdemoactivity. this );
builder.settitle( "提示对话框" );
builder.setmessage(message);
builder.setpositivebutton(android.r.string.ok,
new alertdialog.onclicklistener() {
@override
public void onclick(dialoginterface dialog,
int which) {
result.confirm();
}
});
builder.setcancelable( false );
builder.create();
builder.show();
return true ;
}
// 带按钮的对话框
@override
public boolean onjsconfirm(webview view, string url,
string message, final jsresult result) {
builder builder = new builder(webviewdemoactivity. this );
builder.settitle( "带选择的对话框" );
builder.setmessage(message);
builder.setpositivebutton(android.r.string.ok,
new alertdialog.onclicklistener() {
@override
public void onclick(dialoginterface dialog,
int which) {
result.confirm();
}
});
builder.setneutralbutton(android.r.string.cancel,
new alertdialog.onclicklistener() {
@override
public void onclick(dialoginterface dialog,
int which) {
result.cancel();
}
});
builder.setcancelable( false );
builder.create();
builder.show();
return true ;
}
// 带输入框的对话框
@override
public boolean onjsprompt(webview view, string url, string message,
string defaultvalue, final jspromptresult result) {
layoutinflater inflater = layoutinflater
.from(webviewdemoactivity. this );
final view v = inflater.inflate(r.layout.mydialog, null );
// 设置 textview对应网页中的提示信息
((textview) v.findviewbyid(r.id.textview)).settext(message);
// 设置edittext对应网页中的输入框
((edittext) v.findviewbyid(r.id.edittext))
.settext(defaultvalue);
builder builder = new builder(webviewdemoactivity. this );
builder.settitle( "带输入的对话框" );
builder.setview(v);
builder.setpositivebutton(android.r.string.ok,
new alertdialog.onclicklistener() {
@override
public void onclick(dialoginterface dialog,
int which) {
string value = ((edittext) v
.findviewbyid(r.id.edittext)).gettext()
.tostring();
result.confirm(value);
}
});
builder.setnegativebutton(android.r.string.cancel,
new alertdialog.onclicklistener() {
@override
public void onclick(dialoginterface dialog,
int which) {
result.cancel();
}
});
builder.setoncancellistener( new dialoginterface.oncancellistener() {
@override
public void oncancel(dialoginterface dialog) {
result.cancel();
}
});
builder.create();
builder.show();
return true ;
}
// 设置网页加载的进度条
@override
public void onprogresschanged(webview view, int newprogress) {
webviewdemoactivity. this .getwindow().setfeatureint(
window.feature_progress, newprogress * 100 );
super .onprogresschanged(view, newprogress);
}
// 设置应用程序的标题
@override
public void onreceivedtitle(webview view, string title) {
webviewdemoactivity. this .settitle(title);
super .onreceivedtitle(view, title);
}
});
|
希望本文所述对大家android程序设计有所帮助。