Android-使用WebView显示网页
来源:互联网 发布:真菌转录因子数据库 编辑:程序博客网 时间:2024/06/06 09:14
Android-使用WebView显示网页
2016-03-30 09:37 956人阅读 评论(0)收藏举报
分类:
作者同类文章X
版权声明:本文为博主原创文章,未经博主允许不得转载。
Android-使用WebView显示网页
WebView是安卓提供显示web界面的工具类,可以像PC端的浏览器那样进行显示:
大致就是上图那样。其实也可以不用WebView,简单的三行代码就可以在安卓App上显示网页界面。
示例
Uri uri = Uri.parse("http://www.baidu.com");Intent it = new Intent(Intent.ACTION_VIEW, uri);startActivity(it);
- 1
- 2
- 3
- 1
- 2
- 3
运行效果:
使用WebView
布局文件
<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" tools:context=".MainActivity"> <WebView android:id="@+id/id_webView" android:layout_width="match_parent" android:layout_height="match_parent" ></WebView></LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
主活动
package com.xieth.as.webviewdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.webkit.WebView;public class MainActivity extends AppCompatActivity { private WebView webView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); webView.loadUrl("http://www.baidu.com"); } private void initViews() { webView = (WebView) findViewById(R.id.id_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
- 25
- 26
- 27
- 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
但是结果:
记住要添加访问网络权限
<uses-permission android:name="android.permission.INTERNET"/>
- 1
- 1
OK,现在可以了
可以看到有选择浏览器的对话框。其实我们可以通过代码来指定浏览器来显示,不需要再次选择。
webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
运行效果:
可以看到没有出现那个选择框了。默认是安卓设备自带的浏览器,而不是第三方的。
WebView中使用JavaScript
// 启用支持JavaScript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true);
- 1
- 2
- 3
- 1
- 2
- 3
但是有一个不好的用户体验。
在我们浏览一个页面,再次进入另外一个页面的时候,点击返回键,重新回到上次页面的时候,
但是却退出了,这是一个非常不好的用户体验。
可以通过代码进行改善。
// 重写方法使之可以返回上次的页面 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webView.canGoBack()) { // 判断当前页面是否处于首部 webView.goBack();// 返回上一页面 return true; } else { // 如果当前页面是第一个页面 System.exit(0); // 退出程序 } } return super.onKeyDown(keyCode, event); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
效果:
这样就OK了
判断网页的加载过程
在使用浏览器访问网页的时候,有时候会加载慢,有时候会很快,所以为了给用户更加良好的体验,
我们可以通过进度条的方式来进行展示。
// 进度条显示网页的加载过程 webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { // 加载完毕 closeDialog(newProgress); } else { openDialog(newProgress); } super.onProgressChanged(view, newProgress); } private void openDialog(int newProgress) { if (dialog == null) { dialog = new ProgressDialog(MainActivity.this); dialog.setTitle("正在加载"); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setProgress(newProgress); dialog.show(); } else { dialog.setProgress(newProgress); } } private void closeDialog(int newProgress) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); dialog = null; } } });
- 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
- 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
运行:
WebView使用缓存优化
// 优先使用缓存优化效率 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
- 1
- 2
- 1
- 2
完整代码
package com.xieth.as.webviewdemo;import android.app.ProgressDialog;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.KeyEvent;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;public class MainActivity extends AppCompatActivity { private WebView webView = null; private ProgressDialog dialog = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); webView.loadUrl("http://www.baidu.com"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); // 启用支持JavaScript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // 进度条显示网页的加载过程 webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { // 加载完毕 closeDialog(newProgress); } else { openDialog(newProgress); } super.onProgressChanged(view, newProgress); } private void openDialog(int newProgress) { if (dialog == null) { dialog = new ProgressDialog(MainActivity.this); dialog.setTitle("正在加载"); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setProgress(newProgress); dialog.show(); } else { dialog.setProgress(newProgress); } } private void closeDialog(int newProgress) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); dialog = null; } } }); // 优先使用缓存优化效率 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } // 重写方法使之可以返回上次的页面 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webView.canGoBack()) { // 判断当前页面是否处于首部 webView.goBack();// 返回上一页面 return true; } else { // 如果当前页面是第一个页面 System.exit(0); // 退出程序 } } return super.onKeyDown(keyCode, event); } private void initViews() { webView = (WebView) findViewById(R.id.id_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
- 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
- 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
- 顶
- 2
- 踩
- 0
- 上一篇第七届蓝桥杯C语言C组-(自己懂的题目)
- 下一篇BFS- 迷宫中的英雄
相关文章推荐
- • 【android进阶】Fragment内放置WebView,监听返回键,并返回之前打开的网页
- • android 访问并显示网页
- • Android——使用WebView显示网页
- • 【Android进阶篇】WebView显示网页详解
- • Android:控件WebView显示网页
- • 安卓加载webView只显示部分网页的方法
- • Android使用WebView加载网页及数据
- • android使用webview加载网页
- • android根据Url获取访问网页的源码
- • 【Android开发】网路编程及Internet应用-使用WebView显示网页
阅读全文
0 0
- Android使用Webview显示网页
- android:使用webview显示网页
- Android-使用WebView显示网页
- Android-使用WebView显示网页
- Android-使用WebView视图显示网页
- Android——使用WebView显示网页
- Android中使用WebView显示网页
- android Android:控件WebView显示网页webview的使用
- Android:WebView显示网页
- 使用webView显示网页
- 使用WebView显示网页
- 使用WebView显示网页
- 使用webview显示网页
- android 通过WebView显示网页
- Android:控件WebView显示网页
- Android:控件WebView显示网页
- Android:控件WebView显示网页
- Android:控件WebView显示网页
- LinuxC简谈之输入输出(一)
- hdu 1599 find the mincost route Floyd 无向图求最小环
- 感知器实战
- Hadoop数据收集与入库系统Flume与Sqoop
- queue队列
- Android-使用WebView显示网页
- X64 操作系统内存寻址
- yum安装出现No package vim available解决办法
- poj3498:March of the Penguins——题解
- Spring Data Redis(Repositories-Time To Live)
- Map组装成url请求参数
- [绍棠_swift] swift 中#pragma mark 表示方法
- Linux系统下常见的Xshell运行命令——Xshell入门必看
- Anniversary Cake POJ