本文实例讲述了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 ); |
设置支持各种不同的设备
加载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程序设计有所帮助。