Webview实现android简单的浏览器实例代码

时间:2022-05-28 08:46:44

webview是android中一个非常实用的组件,它和safai、chrome一样都是基于webkit网页渲染引擎,可以通过加载html数据的方式便捷地展现软件的界面,下面通过本文给大家介绍webview实现android简单的浏览器实例代码。

实现了浏览器的返回 前进 主页 退出 输入网址的功能

Webview实现android简单的浏览器实例代码

注释的很清楚啦 就不多说了

首先是布局文件

?
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
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<linearlayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<edittext
android:id="@+id/et_url"
android:layout_width="320dp"
android:layout_height="wrap_content" />
<button
android:id="@+id/btn_login"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="登录"
/>
</linearlayout>
<webview
android:layout_weight="2"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<linearlayout
android:layout_weight="7.5"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:background="#000000"
>
<button
android:id="@+id/btn_back"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="←"
/>
<button
android:id="@+id/btn_menu"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="主页"
/>
<button
android:id="@+id/btn_forward"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="→"
/>
<button
android:id="@+id/btn_exit"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="exit"
/>
</linearlayout>
</linearlayout>

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
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.example.webview;
import android.os.bundle;
import android.app.activity;
import android.view.keyevent;
import android.view.view;
import android.view.view.onclicklistener;
import android.view.window;
import android.webkit.webchromeclient;
import android.webkit.websettings;
import android.webkit.webview;
import android.webkit.webviewclient;
import android.widget.button;
import android.widget.edittext;
public class mainactivity extends activity implements onclicklistener {
private string url = null;
private webview webview;
private edittext et_url;
private button btn_login;
private button btn_back;
private button btn_exit;
private button btn_forward;
private button btn_menu;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
// 窗口进度条
requestwindowfeature(window.feature_indeterminate_progress);
setcontentview(r.layout.activity_main);
setprogressbarindeterminate(true);
webview = (webview) findviewbyid(r.id.webview);
et_url = (edittext) findviewbyid(r.id.et_url);
btn_login = (button) findviewbyid(r.id.btn_login);
btn_back = (button) findviewbyid(r.id.btn_back);
btn_exit = (button) findviewbyid(r.id.btn_exit);
btn_forward = (button) findviewbyid(r.id.btn_forward);
btn_menu = (button) findviewbyid(r.id.btn_menu);
// 对五个按钮添加点击监听事件
btn_login.setonclicklistener(this);
btn_back.setonclicklistener(this);
btn_exit.setonclicklistener(this);
btn_forward.setonclicklistener(this);
btn_menu.setonclicklistener(this);
}
// btn_login的触发事件 点击后 webview开始读取url
protected void startreadurl(string url) {
// todo auto-generated method stub
// webview加载web资源
webview.loadurl(url);
// 覆盖webview默认通过系统或者第三方浏览器打开网页的行为
// 如果为false调用系统或者第三方浏览器打开网页的行为
webview.setwebviewclient(new webviewclient() {
@override
public boolean shouldoverrideurlloading(webview view, string url) {
// todo auto-generated method stub
// webview加载web资源
view.loadurl(url);
return true;
}
});
// 启用支持javascript
websettings settings = webview.getsettings();
settings.setjavascriptenabled(true);
// web加载页面优先使用缓存加载
settings.setcachemode(websettings.load_cache_else_network);
// 当打开页面时 显示进度条 页面打开完全时 隐藏进度条
webview.setwebchromeclient(new webchromeclient() {
@override
public void onprogresschanged(webview view, int newprogress) {
// todo auto-generated method stub
settitle("本页面已加载" + newprogress + "%");
if (newprogress == 100) {
closeprogressbar();
} else {
openprogressbar(newprogress);
}
super.onprogresschanged(view, newprogress);
}
});
}
// 打开进度条
protected void openprogressbar(int x) {
// todo auto-generated method stub
setprogressbarindeterminatevisibility(true);
setprogress(x);
}
// 关闭进度条
protected void closeprogressbar() {
// todo auto-generated method stub
setprogressbarindeterminatevisibility(false);
}
// 改写物理按键 返回键的逻辑
@override
public boolean onkeydown(int keycode, keyevent event) {
// todo auto-generated method stub
if (keycode == keyevent.keycode_back) {
if (webview.cangoback()) {
// 返回上一页面
webview.goback();
return true;
} else {
// 退出程序
finish();
}
}
return super.onkeydown(keycode, event);
}
// 对按钮事件的处理
@override
public void onclick(view v) {
// todo auto-generated method stub
switch (v.getid()) {
case r.id.btn_login:
url = "http://" + et_url.gettext().tostring();
url = url.replace(" ", "");
startreadurl(url);
break;
case r.id.btn_back:
if (webview.cangoback()) {
webview.goback();
} else {
finish();
}
break;
case r.id.btn_forward:
if (webview.cangoforward()) {
webview.goforward();
}
break;
case r.id.btn_exit:
finish();
break;
case r.id.btn_menu:
startreadurl("http://www.baidu.com");
break;
}
}
}

最后不要忘记在androidmanifest.xml文件中配置网络访问的权限

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

以上内容给大家介绍了webview实现android简单的浏览器实例代码,希望对大家有所帮助!