使用WebView在界面中显示网页
通过Intent调用系统浏览器
Uri uri=Uri.parse(url);//url为链接的地址
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
-----------------------------
课程目标:通过WebView自制一个简易网页浏览器
课程内容:
(1)将WebView加入到你的应用
(2)使用WebView加载页面
(3)获取网络访问权限(在AndroidManifest中配置)
(4)在WebView中使用Javascript
(5)处理页面加载进程
(6)后退与前进
(7)判断页面的加载过程
(8)WebView缓存的运用(对浏览器的优化)
要在应用中加入WbeView,只需要在你的活动布局中加入<WebView>元素即可
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
加载页面,使用 loadUrl()
web资源: webView.loadUrl("http://www.baidu.com")
本地资源: webView。loadUrl("file:///android_asset/xxx.html");本地文件放在asset文件中
//使页面获得焦点
webView.requestFocus();
------------------------
获取网络访问权限
在它有效工作之前,要保证应用能访问网络。要访问网络,需要在配置文件中获取INTERNET权限:
<manifest ...>
<uses_permission android:name="android.permission.INTERNET" />
...
</manifest>
在WebView中使用JavaScript
如果想在webView中加载的web页面使用JavaScript,需要在WebView中启用JavaScript,通过WebView带有的WebSettings来启用它。可以通过getSettings()获取WebSettings的值,然后通过setJavaScriptEnabled()来启用JavaScript。
webView=(WebView)findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
我们使用 Toast()来显示当前页面的地址。
在网页上点击退回时,可能因为网页自身存在请求重定向,所以可能已经跳转了好几个页面,这时我们需要连续点击返回键才能真正退出程序。
//改写物理按键——返回的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode== KeyEvent.KEYCODE_BACK){ //KeyEvent.KEYCODE_BACK是常量,KeyEvent还有很多其他常量
Toast.makeText(this, webView.getUrl(), Toast.LENGTH_SHORT).show();//显示地址
if(webView.canGoBack()){//如果可以返回,就返回上一页面
webView.goBack();
return true;
}
else{//不能返回,说明已经是首页了,所以就退出程序
System.exit(0);//退出
}
}
return super.onKeyDown(keyCode, event);
}
webSettings.setJavaScriptEnabled(true);
1 public class MainActivity extends Activity implements OnClickListener {
2
3 private String url = null;
4 private WebView webView;
5 private EditText et_url;
6 private Button btn_login;
7 private Button btn_back;
8 private Button btn_exit;
9 private Button btn_forward;
10 private Button btn_menu;
11
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 // 窗口进度条
16 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
17 setContentView(R.layout.fragment_main);
18
19 setProgressBarIndeterminate(true);
20
21 webView = (WebView) findViewById(R.id.webView);
22 et_url = (EditText) findViewById(R.id.et_url);
23 btn_login = (Button) findViewById(R.id.btn_login);
24 btn_back = (Button) findViewById(R.id.btn_back);
25 btn_exit = (Button) findViewById(R.id.btn_exit);
26 btn_forward = (Button) findViewById(R.id.btn_forward);
27 btn_menu = (Button) findViewById(R.id.btn_menu);
28 // 对五个按钮添加点击监听事件
29 btn_login.setOnClickListener(this);
30 btn_back.setOnClickListener(this);
31 btn_exit.setOnClickListener(this);
32 btn_forward.setOnClickListener(this);
33 btn_menu.setOnClickListener(this);
34 }
35
36 // btn_login的触发事件 点击后 webView开始读取url
37 protected void startReadUrl(String url) {
38 // TODO Auto-generated method stub
39 // webView加载web资源
40 webView.loadUrl(url);
41 // 覆盖webView默认通过系统或者第三方浏览器打开网页的行为
42 // 如果为false调用系统或者第三方浏览器打开网页的行为
43 webView.setWebViewClient(new WebViewClient() {
44 @Override
45 public boolean shouldOverrideUrlLoading(WebView view, String url) {
46 // TODO Auto-generated method stub
47 // webView加载web资源
48 view.loadUrl(url);
49 return true;
50 }
51 });
52 // 启用支持javascript
53 WebSettings settings = webView.getSettings();
54 settings.setJavaScriptEnabled(true);
55 // web加载页面优先使用缓存加载
56 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
57 // 当打开页面时 显示进度条 页面打开完全时 隐藏进度条
58 webView.setWebChromeClient(new WebChromeClient() {
59 @Override
60 public void onProgressChanged(WebView view, int newProgress) {
61 // TODO Auto-generated method stub
62 setTitle("本页面已加载" + newProgress + "%");
63 if (newProgress == 100) {
64 closeProgressBar();
65 } else {
66 openProgressBar(newProgress);
67 }
68 super.onProgressChanged(view, newProgress);
69 }
70 });
71 }
72
73 // 打开进度条
74 protected void openProgressBar(int x) {
75 // TODO Auto-generated method stub
76 setProgressBarIndeterminateVisibility(true);
77 setProgress(x);
78 }
79
80 // 关闭进度条
81 protected void closeProgressBar() {
82 // TODO Auto-generated method stub
83 setProgressBarIndeterminateVisibility(false);
84 }
85
86 // 改写物理按键 返回键的逻辑
87 @Override
88 public boolean onKeyDown(int keyCode, KeyEvent event) {
89 // TODO Auto-generated method stub
90 if (keyCode == KeyEvent.KEYCODE_BACK) {
91 if (webView.canGoBack()) {
92 // 返回上一页面
93 webView.goBack();
94 return true;
95 } else {
96 // 退出程序
97 finish();
98 }
99 }
100 return super.onKeyDown(keyCode, event);
101 }
102
103 // 对按钮事件的处理
104 @Override
105 public void onClick(View v) {
106 // TODO Auto-generated method stub
107 switch (v.getId()) {
108 case R.id.btn_login:
109 url = "http://" + et_url.getText().toString();
110 url = url.replace(" ", "");
111 startReadUrl(url);
112 break;
113 case R.id.btn_back:
114 if (webView.canGoBack()) {
115 webView.goBack();
116 } else {
117 finish();
118 }
119 break;
120 case R.id.btn_forward:
121 if (webView.canGoForward()) {
122 webView.goForward();
123 }
124 break;
125 case R.id.btn_exit:
126 finish();
127 break;
128 case R.id.btn_menu:
129 startReadUrl("http://www.baidu.com");
130 break;
131 }
132 }
133 }