Android webview用法实例简析

本文简单分析了Android webview用法。分享给大家供大家参考,具体如下:

在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装成名为WebView的组件。

WebView使用:

(1)添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
(2)在要Activity中生成一个WebView组件:

代码如下:

WebView webView = new WebView(this);

(3)设置WebView基本信息:

webview.getSettings().setJavaScriptEnabled(true);// 设置支持Javascript
requestFocus();// 触摸焦点起作用
setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);// 取消滚动条

(4)设置WevView要显示的网页:

webView.loadUrl("http://www.google.com");// 互联网
webView.loadUrl("file:///android_asset/XX.html");// 本地文件,本地文件存放在:assets文件中

(5)如果希望点击链接不打开Android的系统browser中响应,则需要给WebView添加一个事件监听并重写shouldOverrideUrlLoading方法。

public boolean shouldOverrideUrlLoading(WebView view,String url) {
 view.loadUrl(url);
 return true;
}

其它部分可重写的方法:

(1)接收到Http请求的事件

代码如下:

onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)

(2)打开链接前的事件

public boolean shouldOverrideUrlLoading(WebView view, String url) {
 view.loadUrl(url);
 return true;
}

(3)载入页面完成的事件

public void onPageFinished(WebView view, String url) {
}

(4)载入页面开始的事件

public void onPageStarted(WebView view, String url, Bitmap favicon) {
}

这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。

一、如果用WebView点链接看了很多页以后,如果不做任何处理,点击系统返回(Back)键,整个浏览器会调用finish()方法而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。

覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。

public boolean onKeyDown(int keyCode,KeyEvent event){
 if(webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK){
  webview.goBack();// goBack()表示返回webView的上一页面
  return true;
 }
 return false;
}

二、loadData()和loadDataWithBaseURL()使用的区别

loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码。

处理方法:我们需要用UrlEncoder编码为%23, %25, %27, %3f 。 可以使用以下两种代码,data为string类型的html代码 (1)webView.loadData(URLEncoder.encode(data, "utf-8"), "text/html", "utf-8"); (2)webView.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);

WebView相关属性:

(1)设置WebView为透明:

android:background="#00000000"
android:cacheColorHint="#00000000"
WebView.setBackgroundColor(0);

(2)WebView 显示sd卡图片:

代码如下:

webView.loadDataWithBaseURL(null, "", "text/html" , "utf-8", null);

(3)WebView显示字符串

代码如下:

webView.loadDataWithBaseURL("", "", "text/html", "utf-8", "");

(4)设置WebView中显示字体的大小

public static final TextSize[] FONT_SIZES = new TextSize[] {
 TextSize.SMALLER,
 TextSize.NORMAL,
 TextSize.LARGER
};
private WebSettings wb;
wb = mWebViewRightContent.getSettings();
wb.setTextSize(FONT_SIZES[iFontSizeId]);

字体大小:

public enum TextSize {
 SMALLEST(50),
 SMALLER(75),
 NORMAL(100),
 LARGER(150),
 LARGEST(200);
 TextSize(int size) {
 value = size;
 }
 int value;
}

(5)WebView显示html文件时,若要达到和PC上浏览器显示的效果完全一样,只需对WebView做一下设置即可:

适应全屏
39 适应竖屏
57 适应横屏

代码如下:

mWebView.setInitialScale(39);

注意的是:html如果字体太小则在Android手机上显示的就很小。一般为6、7号字体。
(6)WebView设置渐变:

android:fadingEdge="vertical"
android:fadingEdgeLength="20px" <!-- (垂直方向,上下渐变区域为20px)-->

(7)设置WebView可触摸放大缩小:

代码如下:

mWebView.getSettings().setBuiltInZoomControls(true);

(8)WebView双击变大,再双击后变小,当手动放大后,双击可以恢复到原始大小,如下设置:

代码如下:

webView.getSettings().setUseWideViewPort(true);

(9)几种加速WebView加载的方法,提高渲染的优先级

代码如下:

webView.getSettings().setRenderPriority(RenderPriority.HIGH);

使用

代码如下:

webView.getSettings().setBlockNetworkImage

把图片加载放在最后来加载渲染

代码如下:

webView.getSettings().setBlockNetworkImage(true);

(10)将字符串转换成HTML形式的文件显示:

// 获取的字符串
String sDetails = cursor.getString(cursor.getColumnIndex("sChinese"));
// 按行截取字符串,将其存放在数组中
String[] str = sDetails.split("\n");
String s1 = "";
// 遍历数组进行判断,如果条件成立,就添加设定的css样式
for (int i = 0;i < str.length;i ++) {
 if (str[i].trim().startsWith("vt.")) {
  str[i] = "<h3 style=\"font-size:10px; color:#000; background:#FCFCFC; padding:3px 5px;\">" + str[i] + "<h3>" + "\n";
 } else if (getMark(str[i].trim())) {
  str[i] = "<h4 style=\"font-size:10px; color:#F60; font-weight:normal;\">" + str[i] + "</h4>" + "\n";
 } else if (str[i].trim().startsWith("〖")) {
  str[i] = "<span style=\"color:#333; font-size:10px; color:#F60\">" + str[i] + "</span>" + "\n";
 } else {
  str[i] = "<p style=\"line-height:16px; font-size:10px;color:#666;\">" + str[i] + "</p>" + "\n";
 }
 // 将修改后的字符串拼接起来
 s1 += str[i];
}
// 用WebView将字符串以HTML的形式显示出来
webView.loadDataWithBaseURL("fake://not/needed", s1, "text/html", "utf-8", "");

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android中WebView图片实现自适应的方法

    本文实例讲述了Android中WebView图片实现自适应的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: WebSettings ws = tv.getSettings(); 加上这个属性后,html的图片就会以单列显示就不会变形占了别的位置 ws.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //让缩放显示的最小值为起始 webView.setInitialScale(5); // 设置支持缩放 webSettin

  • Android WebView控件捕获用户输入的信息

    WebView可所谓是Android中最强大的控件之一,无所不能. 于是有这么一个需求,用户在app之中内嵌的WebView中输入帐号密码的时候,App需要捕获已经输入的帐号密码. 当用户输入帐号密码,一般情况下会进行页面转跳,在页面转跳之前执行js脚本,通过js脚本来获取这个帐号密码的value值.要先获取各个元素的class值,需要解析整个html页面,那么我们可以重写 onLoadResource 这个方法,代码如下: webview.setWebViewClient(new WebVie

  • Android中实现Webview顶部带进度条的方法

    写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面. 示例图如下: 主Activity代码: 复制代码 代码如下: package com.droidyue.demo.webviewprogressbar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.vi

  • Android webview与js交换JSON对象数据示例

    最近几个项目的测试结果,Android无法主动通过调用 webview.loadUrl("javascript:"+callbackFunction+"('"+data+"')"); 这种方式将jsonobject类型的data传给js,因为js那边得到就是一个string的对象. 与此同时,js主动调用android的对象方式,android也无法返回给js一个jsonobject,需要js做一下转换,例如: Android 代码: 复制代码

  • Android中使用WebSocket实现群聊和消息推送功能(不使用WebView)

    WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考:如何理解 TCP/IP, SPDY, WebSocket 三者之间的关系? 今天的重点是讲如何在Android中脱离WebView使用WebSocket,而不是在Web浏览器

  • 关于Android WebView的loadData方法的注意事项分析

    loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码.需要如何处理呢?我们需要用UrlEncoder编码为%23, %25, %27, %3f .可以使用以下两种代码,data为string类型的html代码1.webView.loadData(URLEncoder.encode(data, "utf-8"), "text/html",  "u

  • Android编程经典代码集锦(复制,粘贴,浏览器调用,Toast显示,自定义Dialog等)

    本文实例总结了Android编程经典代码段.分享给大家供大家参考,具体如下: 1. 复制,粘贴 clip = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); clip.setText("copy"); // 复制 clip.getText(); // 粘贴 2.调用浏览器 核心代码如下: Intent intent = new Intent(); intent.setAction("android.

  • Android开发之WebView组件的使用解析

    在 Android 手机中内置了一款高性能 webkit 内核浏览器, SDK 中封装为一个叫做 WebView 组件. WebView 类是 WebKit 模块 Java 层的视图类,( 所有需要使用 Web 浏览功能的Android应用程序都要创建该视图对象显示和处理请求的网络资源.目前,WebKit 模块支持 HTTP.HTTPS.FTP 以及 javascript 请求. WebView 作为应用程序的 UI 接口,为用户提供了一系 列的网页浏览.用户交互接口,客户程序通过这些接口访问

  • 在Android系统中使用WebViewClient处理跳转URL的方法

    前言 最近代码里和WebView有很多的交互,webview是android中的浏览器控件,这里主要介绍一下webview如何重载WebViewClient类来控制URL加载. 使用WebViewClient 使用WebViewClinet主要是继承WebViewClient父类,根据需要重写其中的方法,并在WebView中进行配置,示例代码如下: webView = (WebView) findViewById(R.id.webview); webView.setWebViewClient(n

  • Unity3D游戏引擎实现在Android中打开WebView的实例

    本文讲述了如何在Unity中调用Android中的WebView组件,实现内部浏览器样式的页面切换.首先打开Eclipse创建一个Android的工程: UnityTestActivity.java 入口Activity ,Unity中会调用这个Activity中的方法从而打开网页. package com.xys; import android.content.Context; import android.content.Intent; import android.os.Bundle; i

  • Android自定义 WebView浏览器

    WebView是Android中一个非常实用的组件,它和Safai.Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面. 在布局文件中添加<EditText/>和<Button/>控件, 在布局文件中添加<WebView/>控件 在Activity中获取WebView对象 调用WebView对象的loadUrl()方法,参数:String路径 添加访问网络的权限android.permission.INTERNET 调用

  • Android使用WebView播放flash的方法

    本文实例讲述了Android使用WebView播放flash及判断是否安装flash插件的方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 最近帮一个同学做一个项目,断断续续的一些知识点记录一下.一个页面中有一个WebView,用来播放swf,如果系统中未安装flash插件,必须提示用户到market中安装. 二.解决方法: 下面做一个demo,效果图如下: 图1: 图2: 图3: 首先布局文件,很简单: 复制代码 代码如下: <RelativeLayout xmlns:android

  • 解析Android中webview和js之间的交互

    1.android中利用webview调用网页上的js代码.Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:mWebView.getSettings().setJavaScriptEnabled(true);mWebView.loadUrl("javascript:test()"); 2. 网页上调用android中java代码的方法在网页中

  • android webview 中localStorage无效的解决方法

    我在 android里面 使用html5的 localStorage 为什么存不进去也读不出来呀? 网上搜了好多都没效果 复制代码 代码如下: mainWebView = (WebView)this.findViewById(R.id.mainWebView);         WebSettings settings = mainWebView.getSettings();         settings.setJavaScriptEnabled(true);         setting

  • android WebView加载html5介绍

    Android设备多分辨率的问题 Android浏览器默认预览模式浏览 会缩小页面 WebView中则会以原始大小显示 Android浏览器和WebView默认为mdpi.hdpi相当于mdpi的1.5倍 ldpi相当于0.75倍 三种解决方式:1 viewport属性 2 CSS控制 3 JS控制 1 viewport属性放在HTML的<meta>中 Html代码 复制代码 代码如下: <SPANstyle="FONT-SIZE: x-small"> <

  • android中webview控件和javascript交互实例

    当我们要实现丰富的图文混排效果的时候,我们一般会使用webview,这是一个功能十分强大的的控件,来看看官方的解释: 复制代码 代码如下: A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content within your Activity. It uses the WebKit

  • Android实现WebView删除缓存的方法

    本文实例讲述了Android实现WebView删除缓存的方法.分享给大家供大家参考.具体如下: 删除保存于手机上的缓存: // clear the cache before time numDays private int clearCacheFolder(File dir, long numDays) { int deletedFiles = 0; if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listF

随机推荐