WebView使用详解
一、用WebView处理页面导航
可以加载本地资源也可以加载web资源,区别是我们要加载本地资源要实现在assets文件夹里添加一个.html资源。调取网页的时候可以用loadUrl方法把网址添加进去也可以用Intent意图,把Uri地址添加进去就好了,在这里我就不写不来了。但是在打开的时候总是默认通过第三方浏览器或者系统自带浏览器打开网页,下面这段代码就是解决这个问题的,使得网页在webView中打开。
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 返回true的时候控制网页在WebView中打开
//返回false的时候是调用系统浏览器或者第三方浏览器打开
view.loadUrl(url);
return true;
}
});
二、在WebView中使用JavaScript
如果想要在加载WebView中的web页面使用JavaScript,需要在WebView中启用JavaScript。启用JavaScript可以通过WebView中带有WebSettings来启用它,可以通过getSettings()来获取WebSettings的值,然后通过setJavaScriptEnabled()来启用JavaScript。代码如下:
WebSettings webSettings=webView.getSettings();
webSettings.setJavaScriptEnabled(true);
三、解决WebView前进与后退的问题
当我们一级一级的打开网页的时候,我们按Back键的时候并不是一级一级返回的,而是整个WebView都退出来了,这样的用户体验是非常差的。为了解决这个问题,我们需要自动生成历史访问记录,生成历史返回记录的前提是要WebView覆盖Url的加载,覆盖之后就可以通过 goBack()或者goForward()向前或向后访问已经访问过的站点。代码如下:
@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);
}
四、判断页面的加载过程
我们在打开一个网页的时候,由于有些网页加载的缓慢,在加载出来网页之前,界面的一片空白的,影响用户体验。所以我们需要去判断页面的加载过程,制作进度条给用户良好的体验效果。代码实现如下:
webView.setWebChromeClient(new WebChromeClient() {
@Override
// newProgress是1-100之间的整数
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
// 网页加载完成
if (newProgress == 100) {
// 关闭加载完毕,关闭ProgressDialog
closeDialog();
} else {
// 网页正在加载,打开ProgressDialog
openDialog(newProgress);
}
}
private void openDialog(int newProgress) {
if (dialog == null) {
dialog = new ProgressDialog(Test.this);
dialog.setTitle("正在加载");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(newProgress);
dialog.show();
} else {
dialog.setProgress(newProgress);
}
}
protected void closeDialog() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
dialog = null;
}
}
});
五、WebView缓存的应用
上边的方法是给用户一种错觉,网页正在加载要耐心的等一会儿,这并不是最好的解决办法,所以需要给WebView添加缓存,WebView默认情况是没有带缓存的。代码实现如下:
WebSettings settings=webView.getSettings();
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
缓存资源在File Explorer——>data——>data——>当前项目文件夹——>cache目录下
六、WebView一些基本设置
1、是否支持JavaScript
webView.getSettings().setJavaScriptEnabled(false);
2、是否支持缩放,默认为true
webView.getSettings().setSupportZoom(false);
3、设置是否显示缩放工具,默认为false
webView.getSettings().setBuiltInZoomControls(false);
4、一般很少会用到这个,用WebView组件显示普通网页时一般会出现横向滚动条,这样会导致页面查看起来非常不方便。LayoutAlgorithm是一个枚举,用来控制html的布局,总共有三种类型:NORMAL:正常显示,没有渲染变化。SINGLE_COLUMN:把所有内容放到WebView组件等宽的一列中。NARROW_COLUMNS:可能的话,使所有列的宽度不超过屏幕宽度。
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
5、设置默认的字体大小,默认为16,有效值区间在1-72之间
webView.setDefaultFontSize(20);
七、加载内容的三种方式
除了上面提到的可以加载assets目录下的本地网页和远程网页,还可以使用 LoadData 或者 loadDataWithBaseURL方法加载内容,在这里我说一说第三种。
有时候我们的webview可能只是html片段,而不是一个完整的网页,事实上绝大多数时候都是这样的。这种情况我们使用 LoadData 或者 loadDataWithBaseURL方法。
void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)
void loadData (String data, String mimeType, String encoding)
String body =
"<img src='/uploads/allimg/130923/1FP02V7-0.png' />"
;
六、WevView访问网络权限
<uses-permission android:name="android.permission.INTERNET"/>
WebView使用详解的更多相关文章
- Android WebView 开发详解
Android WebView 开发详解 参见 http://blog.csdn.net/typename/article/details/39030091
- WebView使用详解(二)——WebViewClient与常用事件监听
登录|注册 关闭 启舰 当乌龟有了梦想…… 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书 免费直播:AI时代,机器学习如何入门? 程序员8 ...
- Android WebView 开发详解(三)
转载请注明出处 http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...
- Android WebView 开发详解(二)
转载请注明出处 http://blog.csdn.net/typename/article/details/39495409 powered by miechal zhao 概览: Androi ...
- Android WebView 开发详解(一)
转载请注明出处 http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android ...
- Android webview使用详解
1. 打开网页时不调用系统浏览器, 而是在本WebView中显示: mWebView.setWebViewClient(new WebViewClient(){ @Override public bo ...
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
念念不忘,必有回响,永远坚持你所坚持的! 一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家 一.基本用法 1.加载在线URL void loadUrl(String ...
- Android中的WebView实战详解(一)
一.为什么要用WebView? 1.兼容已有的项目2.可动态更新 二.WebView怎样使用? WebView是一个控件,如在布局中设置: <WebView android:id="@ ...
- Android中的WebView实战详解(二)
四.如何用WebView下载软件? 四.如何用WebView下载软件? public class MainActivity extends AppCompatActivity { private We ...
随机推荐
- Flex的学习资源
学习网站 http://www.adobe.com/cn/devnet/flex.html Adobe Flex开发人员中心 http://www.adobe.com/cn/devnet/flex/v ...
- PHP自学之路-----javascript基础入门
Javascript概述: Javascript是基于对象和事件的脚本语言.特点; 1.安全性(不允许直接访问本地硬盘),它可以做的就是信息的动态交互. 2.跨平台性. JavaScript与HTML ...
- vi 替换命令“找不到模式”解决
在linux vi编辑工具中使用替换命令操作时,会出现明明有匹配查找模式的数据.却报"找不到模式"问题. 原因是vi s///替换操作缺省针对行,若要生效,则须要将光标移动到指定行 ...
- AIX LVM学习笔记
LVM: LOGIC VOLUMN MANAGEMENT (逻辑卷管理器) 通过将数据在存储空间的 逻辑视图 与 实际的物理磁盘 之间进行映射,来控制磁盘资源.实现方式是在传统的物理设备驱动层之上加载 ...
- Cannot mix incompatible Qt library (version 0x40801) with this library (version 0x40804)
安装EMAN2(单颗粒重构的软件)之后,运行e2projectmanager.py来启动程序出现了这个错误. 去网上找了一下,发现一个靠谱的方案,这个问题出现是由于EMAN2这个程序自带了Qt的库,而 ...
- java执行windows 的cmd 命令
//获取运行时 Runtime rt = Runtime.getRuntime(); //获取进程 Process p = rt.exec(String[] cmdarray); 或者 P ...
- 字符串-06. IP地址转换(20)
#include<iostream> #include<string> #include<cmath> using namespace std; int main( ...
- Java学习之自定义异常
1 package com.gh; import java.util.Scanner; /** * 自定义异常 * @author ganhang * */ public class Exceptio ...
- [置顶] linux常用命令手册
前言:整理了一份linux常用命令手册,与大家分享.这是一些比较常用的命令. 我已经整理成一份PDF带书签的手册,可以到CSDN免费下载. 下载地址:http://download.csdn.net/ ...
- SICP 习题 (2.7) 解题总结 : 定义区间数据结构
SICP 习题 2.7 開始属于扩展练习,能够考虑不做,对后面的学习没什么影响.只是,假设上面的使用过程表示序对,还有丘奇计数你都能够理解的话,完毕这些扩展练习事实上没什么问题. 习题2.7是要求我们 ...