WebView常用方法

WebSettings

在使用WebView前我们都要进行相关的配置,常见的操作如下:

 WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true); //支持javascript
settings.setUseWideViewPort(true); //设置webview推荐使用的窗口,使html界面自适应屏幕
settings.setLoadWithOverviewMode(true); //缩放至屏幕的大小
settings.setAllowFileAccess(true); //设置可以访问文件
// settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); //设置中等像素密度,medium=160dpi
settings.setSupportZoom(true); //设置支持缩放
settings.setLoadsImagesAutomatically(true); //设置自动加载图片
// settings.setBlockNetworkImage(true); //设置网页在加载的时候暂时不加载图片
// settings.setAppCachePath(""); //设置缓存路径
settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //设置缓存模式

WebChromeClient

WebChromeClient主要是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等。

mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
mTitle.setText(title);
} @Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
mProgressBar.setVisibility(View.GONE);
}
mProgressBar.setProgress(newProgress);
} });

WebViewClient

WebViewClient用来辅助WebView处理各种通知、请求事件的,例如在WebView中点击请求新的链接、页面加载开始、结束等:

mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
} @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
} @Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});

上\下一个页面

private void goBack(){
if (mWebView.canGoBack()){
mWebView.goBack();
}else{
finish();
}
} private void goForward() {
if (mWebView.canGoForward()) {
mWebView.goForward();
}
}

就是通过WebView的goBack()、goForward()方法。

下载

mWebView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
long contentLength) { }
});

java与js交互

首先编写一个简单的H5:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>js test</title>
</head> <script type="text/javascript">
function click1(){
window.client.showMessage("来自js的消息");
} function click2(msg){
alert("来自java代码的消息:" + msg)
} </script>
<body>
<input id="one" type="button" value="js调用java代码" onclick="click1()"
style="width:300px; height:150px; font-size:35px"/>
</body>
</html>

内容很简单,两个函数click1、click2,一个按钮,点击按钮执行click1函数。

将改H5文件放到assets目录,之后用WebView加载改H5:

mWebView.loadUrl("file:///android_asset/test.html");

接下来在Activity中编写一个特殊的类:

class JsOperation {
@JavascriptInterface
public void showMessage(String msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
}

然后注入到WebView中:

mWebView.addJavascriptInterface(new JsOperation(), "client");

注意和js中的这行代码对比下:

window.client.showMessage("来自js的消息");

其中client就是addJavascriptInterface()的第二个参数,当然这个参数可以自定义,但要保持一致。js中调用的showMessage()方法,就是我们JsOperation类中的方法。

点击H5中的按钮,可以看到一个Toast提示:

到这里就完成了js对java代码的调用,接下来看如下通过java代码调用js。

其实很简单:

mWebView.loadUrl("javascript:click2" + "(" + 1008611 + ")");

这样就可以执行js中的click2函数了。我们通过模拟器返回键执行这行代码,可以看到一个提示框,即click2函数得到执行:

模拟原生应用的页面跳转

效果

首先可以在Activity的onCreate()中创建一个栈,并将当前Activity入栈:

if (mStack == null) {
mStack = new Stack<>();
} mStack.push(this);

在WebView中继续加载新页面时:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intent.putExtra("url", url);
startActivity(intent); return true;
}

我们重写了shouldOverrideUrlLoading(),重新启动当前Activity来加载新链接,则一个新的Activtiy会入栈,这样就有了跳转的效果。

在返回上一个界面时进行出栈操作:

private void popActivity() {
if (mStack.size() > 0) {
mStack.remove(this);
this.finish();
}
}

源码

源码

参考链接

Android 你应该知道的WebView - 简书

Android之WebView学习的更多相关文章

  1. Android Chromium WebView学习启动篇

    Android从4.4起提供基于Chromium实现的WebView.此前WebView基于WebKit实现.WebKit提供网页解析.布局和绘制以及JS执行等基础功能.Chromium在WebKit ...

  2. Android WebView学习

    Android WebView学习 文章来源:小小懒羊羊个人知识管理库 权限: <uses-permission android:name="android.permission.IN ...

  3. Android中webView的基础使用(一)

    WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?xml version=& ...

  4. 实现android里面WebView显示内容

    在日常学习.我们会看到,当手机应该检查注册协议.单击协议时,以查看内部协议的全部内容! 以下给大家看看实现的过程: 首先贴show_xy.XML代码: <WebView android:layo ...

  5. Android在WebView上构建Web应用程序

    原文链接:http://developer.android.com/guide/webapps/webview.html reference:http://developer.android.com/ ...

  6. android.webkit.WebView/WebViewClient/WebChromeClient

    使用android.webkit.WebView控件 在xml布局文件中定义 <WebView   android:id="@+id/webkit01"   android: ...

  7. [WebView学习之三]:使用WebView来创建Apps

    上一篇我们学习了([WebView学习之二]:使用Web Apps 支持不同分辨率屏),今天我们来继续学习. (博客地址:http://blog.csdn.net/developer_jiangqq) ...

  8. [WebView学习之二]:使用Web Apps 支持不同分辨率屏

    上一篇我们学习了(1.[WebView学习之中的一个]:Web Apps简单介绍),今天我们来继续学习. (博客地址:http://blog.csdn.net/developer_jiangqq),转 ...

  9. Android+Jquery Mobile学习系列(9)-总结和代码分享

    经过一个多月的边学习边练手,学会了Android基于Web开发的毛皮,其实开发过程中用Android原生API不是很多,更多的是HTML/Javascript/Css. 个人觉得基于WebView的J ...

随机推荐

  1. Windows上安装使用MongoDB(一)

    首先下载MongoDB的Windows版本,从如下地址: https://www.mongodb.org/downloads. 我下载的msi版本,下载后安装即可,如我安装的盘符是:C:\Progra ...

  2. hiho #1309 任务分配

    #1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN,  ...

  3. Intent flag 与启动模式的对应关系

    Activity有四种启动模式: 1.standard(标准)    2.singleTop    3.singleTask  4.singleInstance 标识某个Activity的启动模式,有 ...

  4. BZOJ 1068: [SCOI2007]压缩

    Sol 区间DP.这个区间DP需要三维, \(f[i][j][k]\) 表示\([i,j]\) 这个区间中是否存在 \(M\) . 转移有两种,一种是这个区间存在 \(M\) ,那么直接枚举 \(M\ ...

  5. linux下的/dev/shm目录

    linux下的/dev/shm目录 linux中/dev目录下一般都是一些设备文件,例如磁盘.内存.摄像头等. /dev/shm这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都 ...

  6. linux下安装使用libuuid(uuid-generate)

    linux下安装使用libuuid(uuid-generate) linux下安装使用libuuid(uuid-generate) UUID简介 安装libuuid库 编写一个程序试一下 代码 编译运 ...

  7. MySQL Errcode 13 with SELECT INTO OUTFILE Can't create/write to file

    这是由于权限问题导致的,最主要的问题是搞清楚权限是如何设置的.Ubuntu 使用 AppArmor 作为程序权限限制, Fedora 使用 selinux 作为程序权限限制. 在linux中,以往的权 ...

  8. 基于Selenium的模拟浏览器采集

    Selenium 也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7.8.9).Mozilla Firefox.Mozil ...

  9. 【转】【编码】ANSI,ASCII,Unicode,UTF8之一

          不同的国家和地区制定了不同的标准,由此产生了 GB2312.GBK.GB18030.Big5.Shift_JIS 等各自的编码标准.这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称 ...

  10. sublime-text3设置浏览器预览html

    选择:Tools - Build System - New Build Syatem... 或者:工具 - 编译系统 - 新编译系统 然后粘贴代码 { "cmd": [" ...