一、用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' />";
   webView.loadDataWithBaseURL("http://www.jcodecraeer.com", body, "text/html", "utf-8",null);

六、WevView访问网络权限

<uses-permission android:name="android.permission.INTERNET"/>

WebView使用详解的更多相关文章

  1. Android WebView 开发详解

    Android WebView 开发详解 参见 http://blog.csdn.net/typename/article/details/39030091

  2. WebView使用详解(二)——WebViewClient与常用事件监听

      登录|注册     关闭 启舰 当乌龟有了梦想……       目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8 ...

  3. Android WebView 开发详解(三)

    转载请注明出处   http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...

  4. Android WebView 开发详解(二)

    转载请注明出处  http://blog.csdn.net/typename/article/details/39495409 powered by miechal zhao   概览: Androi ...

  5. Android WebView 开发详解(一)

    转载请注明出处  http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android ...

  6. Android webview使用详解

    1. 打开网页时不调用系统浏览器, 而是在本WebView中显示: mWebView.setWebViewClient(new WebViewClient(){ @Override public bo ...

  7. WebView使用详解(一)——Native与JS相互调用(附JadX反编译)

    念念不忘,必有回响,永远坚持你所坚持的! 一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家 一.基本用法 1.加载在线URL void loadUrl(String ...

  8. Android中的WebView实战详解(一)

    一.为什么要用WebView? 1.兼容已有的项目2.可动态更新 二.WebView怎样使用? WebView是一个控件,如在布局中设置: <WebView android:id="@ ...

  9. Android中的WebView实战详解(二)

    四.如何用WebView下载软件? 四.如何用WebView下载软件? public class MainActivity extends AppCompatActivity { private We ...

随机推荐

  1. Node安装及搭建简单服务器

    注:本文安装系统为mac,windows及其他系统下载对应安装包 ,mac下载后的安装包为apk文件,windows为msi文件. 安装 1.在网上下载node安装包,官方网站2.双击下载文件,按步骤 ...

  2. Dropping tests(01分数规划)

    Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8176   Accepted: 2862 De ...

  3. Color the ball(树状数组+线段树+二分)

    Color the ball Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Tota ...

  4. 正则RegEXp

    JavaScript RegExp 对象 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes 创建 RegE ...

  5. Name lookup

    Name lookup Types of lookup Argument-dependent lookup Template argument deduction overload resolutio ...

  6. MVC+ADO模式

    MVC+DAO设计模式 博客分类: Java Java WEB开发   MVC+DAO设计模式 本文摘自:http://www.paper.edu.cn    基于MVC+DAO设计模式的Struts ...

  7. c# 流程控制

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. HTML 总结-表单-表单属性

    HTML5 表单属性 HTML5 的新的表单属性 本章讲解涉及 <form> 和 <input> 元素的新属性. 新的 form 属性: autocomplete novali ...

  9. PHPExcel 生成图形报表

    db.php为数据库操作类, $config为数据库配置,PHPExcel版本为PHPExcel_1.8.0,  PHP代码: $dir = dirname(__FILE__); require $d ...

  10. (IOS)N duplicate symbols for architecture i386

    Xcode编译时的error,出现此情况的汇总引用如下: 1.可能存在两个main入口: 2.导入的.h文件可能误写为.m: 3.两文件间可能存在重复定义的全局变量名: 4.使用#include导入文 ...