(1)背景设置,例如下面的代码。

        webView.setBackgroundColor(0);//先设置背景色为transparent
webView.setBackgroundResource(R.drawable.ic_launcher);//然后设置背景图片

(2)获得WebView网页加载

(3)使用WebView阅读PDF文件

Android本身不支持打开PDF文件,其实Google提供了在线解析PDF的方法,即使用WebView来实现。例如下面的代码。

        webView = (WebView) this.findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
//webView.loadUrl("http://sports.sina.com.cn/");
//webView.loadUrl("https://www.tmall.com/");
//webView.loadUrl("https://www.google.com");
//webView.loadUrl("http://www.51cto.com/");
String pdf = "http://www.*****.pdf";
webView.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);

当前主流的开发模式是“WebView+ProgressDialog”

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/> </LinearLayout>
package com.example.progresstest;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast; public class WebViewActivity extends Activity { private ProgressDialog progressBar;
private WebView webView;
private AlertDialog alertDialog; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
//加载WebView
initWebView();
} private void initWebView() {
progressBar = ProgressDialog.show(WebViewActivity.this, null, "正在进入网页,请稍后....");
//获得WebView组件
webView = (WebView) this.findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.com");
alertDialog = new AlertDialog.Builder(this).create();
//设置视图客户端
webView.setWebViewClient(new MyWebViewCLient());
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
/* @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}*/
class MyWebViewCLient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
if(progressBar.isShowing()){
progressBar.dismiss();
}
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
Toast.makeText(WebViewActivity.this, "网页加载出错! ", Toast.LENGTH_LONG);
alertDialog.setTitle("ERROR");
alertDialog.setMessage(description);
alertDialog.setButton("OK", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub }
});
alertDialog.show();
}
} }
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.progresstest"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.progresstest.WebViewActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

(6)拦截超链接

可以使用WebView拦截超链接,用URL表示拦截到的链接,我们可以对URL做判断,如在线播放音乐的链接,即检测其中是否含有http://xxx.mp3这种链接,如果有就调用音乐播放器来播放。或者是在线播放 “rtsp://” 格式的。例如下面的代码。

 @Override
/* 此处能拦截超链接的URL,即拦截href请求的内容
* */
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
//当有新连接时,使用当前的WebView
view.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
//super.onProgressChanged(view, newProgress);
//Activity和WebView根据加载程度决定进度条的进度大小
//当加载到100%的时候,进度条自动消失
context.setProgress(newProgress * 100);
}
});
view.loadUrl(url); //调用拨号程序
/* if (url.startsWith("mailto:") || url.startsWith("geo:") ||url.startsWith("tel:")){
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent);
}*/
return true;
}

(7)处理SslError

在Android中,WebView是用来load加载HTTP和HTTPS网页到本地应用的控件。在默认情况下,通过loadUrl(String url)方法,可以顺利load如http://www.baidu.com之类的页面。但是当加载有SSL层的HTTPS页面时,如https://money.183.com.cn/,如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,而并不会像PC浏览器中那样跳出一个风险提示框。因此,我们必须针对这种情况进行处理。在Android处理时需要用到如下两个类。

import android.net.http.SslError;
import android.webkit.SslErrorHandler;

具体用法如下所示。

            @Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
// TODO Auto-generated method stub
//super.onReceivedSslError(view, handler, error);
handler.cancel();//默认的处理方式,WebView变成空白页
handler.proceed();//接受证书
//handleMessage(Message msg);//其他处理
}

(8)删除缓存

我们可以使用WebView删除手机上的缓存,例如下面的代码。

     @SuppressWarnings("unused")
private int clearCacheFolder(File dir,long numDays){
int deletedFiles = 0;
if (dir!=null && dir.isDirectory()){
try {
for (File child:dir.listFiles()){
if (child.isDirectory()){
deletedFiles += clearCacheFolder(child,numDays); }
if(child.lastModified() < numDays){
if(child.delete()){
deletedFiles++;
}
} }
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return deletedFiles; }

优先使用缓存的设置代码如下。

        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

使用缓存的设置代码如下。

        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

(9)使用WebView设置URL的加载

当在WebView里打开一个链接时,默认地会通过ActivityManger寻找合适的浏览器进行打开,如果避免这种事情发生的话,可以通过如下流程解决。

● 添加权限

在文件AndroidManifest.xml中声明“android.permission.INTERNET”权限,否则会出“Web page not available” 错误。

● 在要显示的Activity中生成一个WebView组件:

        webView = new WebView(this);

设置WebView基本信息:

如果访问的页面中有JavaScript,则WebView必须设置支持JavaScript。

        webView.getSettings().setJavaScriptEnabled(true);

还需要设置触摸焦点起作用:

        webView.requestFocus();

并取消滚动条功能:

        webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);

● 设置WebView要显示的网页:

互联网用:

        webView.loadUrl("https://www.google.com");

本地文件用:

        webView.loadUrl("file:///android_asset/XX.html");

(10)用WebView单击链接看了很多网页以后,如果不做任何处理,单击系统“Back”键,整个浏览器会调用finish()而结束自身。如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件,并覆盖Activity类的public boolean onKeyDown(int keyCode, KeyEvent event) 方法。

根据上述做法可知,其实就是实现了一个继承于WebViewClient的类,例如下面的代码。

     public class  TestClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("TestClient", url);
// TODO Auto-generated method stub
// TODO:在此添加url 处理代码,如果返回true,则WebView不会请求ActivityManager打开这个url
//return super.shouldOverrideUrlLoading(view, url);
return false;
}
}

从此以后,就可以通过WebView.setWebViewClient()设置上述类的实例化对象即可,这也可以算是一种另类的HTML页面与Java之间的通信手段,甚至可以用在浏览器插件和Java程序之间的通信。

10.3.3 WebView的几个常见功能的更多相关文章

  1. android WebView详解,常见漏洞详解和安全源码

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  转载请注明出处:http://blog.csdn.net/se ...

  2. Lucene.net常见功能实现知识汇总

    在开发SearchEasy Site SearchEngine(搜易站内搜索引擎)的时候,经常会遇到一些搜索引擎的常见功能如何实现的问题,比如实现相关度百分比显示?如何实现在结果中搜索等等诸如此类常见 ...

  3. Markdown不常见功能

    推荐几个Markdown不常见功能 1.表情符号 emoji表情使用:EMOJICODE:的格式,详细列表可见 https://www.webpagefx.com/tools/emoji-cheat- ...

  4. SLAM+语音机器人DIY系列:(二)ROS入门——10.在实际机器人上运行ROS高级功能预览

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  5. Atiit 常见功能 常用功能与模块的最快速解决方案

    Atiit 常见功能 常用功能与模块的最快速解决方案 一.大力使用第三方API接口 一.导出excel jquery.table2excel 二.Form表单验证,使用h5验证属性 验证发生在form ...

  6. 一个网络设备的常见功能--连通性检查SSRF漏洞--被黑客利用当做扫描器

    一.我们先来看一下很多网络设备都有的一个常见功能--连通性测试: 很多网络设备都具备与其他设备通信,联动的功能,例如网络设备联动安全设备,网络设备联动认证设备等等.此时都需要一个对端IP和对端端口号作 ...

  7. B2C电子商务系统研发——产品媒体常见功能点

    产品媒体常见功能点 电商研发系列——产品媒体常见功能点 支持图片.视频和文档等媒体类型 产品图片对清晰度要求比极高,但又不能太大,所以图片一般是jpg格式. 视频一般是flv流媒体格式,如果是嵌入产品 ...

  8. ArcSDE 10.1 For Windows 创建空间数据库与常见错误_SQL Server

    本文是2013年时候参加ESRI竞赛,创建ArcSDE 10.1 for SQL Server时候出问题了,因此写了该文档. 由于一直忙于学习,忘了发布.今天一师弟也遇到同样问题,为此我觉得可能有不少 ...

  9. 10个利用Eclipse调试Java的常见技巧

    http://www.open-open.com/news/view/1ad9099 阅读目录 1. Conditional Breakpoint 2. Exception Breakpoint 3. ...

随机推荐

  1. 关于react框架的一些细节问题的思考

    目录 setState到底是同步的还是异步的? 如何在子组件中改变父组件的state? context的运用,避免“props传递地狱” 组件类里有私有变量a,它到底改放在this.a中还是this. ...

  2. UGUI世界坐标转换为UI本地坐标(游戏Hud的实现)

    实现世界坐标的原理是: 世界坐标和UGUI的坐标分属两个坐标系,他们之间是无法进行转换的,需要通过屏幕坐标系来进行转换(因为屏幕坐标是固定的),即先将游戏场景中的世界坐标通过游戏场景Camera转化为 ...

  3. 11.11如何卖到一个亿:从0到1的电商爆品打造术 电子书 PDF

    内容转自:https://download.csdn.net/download/chenyao1994/11191034 下载地址:https://pan.baidu.com/s/1uQ1cjm9QH ...

  4. zoj 3314 CAPTCHA(纯模拟)

    题目 有些人用深搜写的,当然我这弱弱的,只理解纯模拟... 纯模拟,第一次写了那么长的代码,我自己也是够坚韧不拔的,,,,必须留念啊!!! 注意,G包含C,E包含L,R包含P,(照图说O应该不包含C, ...

  5. 51nod1049 最大子段和【动态规划】

    N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5,- ...

  6. Unity jointmoto

    jointmoto是模拟电机的,他的参数包括了最高车速和最大扭矩 扭矩总是正数,而目标车速决定了方向

  7. HTML学习笔记之HTML5新特性

    目录 1.拖放 2.画布 3.可伸缩矢量图形 4.地理定位 5.Web 存储 6.应用缓存 7.Web Worker 1.拖放 拖放是一种常见的特性,用于抓取对象以后拖到另一个位置,它是 HTML5 ...

  8. ThinkPHP5.1安装

    安装 ====== 按照官方的推荐方式,推荐使用composer方式安装 TP5.1环境要求 PHP >= 5.6.0 PDO PHP Extension MBstring PHP Extens ...

  9. 20170704-WNDR4300uboot help info

    Unknown command 'env' - try 'help'ar7240> help? - alias for 'help'base - print or set address off ...

  10. SpringMVC demo 小例子,实现简单的登录和注册

    1.创建一个动态的web工程 2.导入springMvc所需要的jar包(这里可以去网上找,资源有很多) 前两部就不详细描述了,后面才是正经代码~ 首先有一个web.xml文件,这个属于大配置文件,由 ...