API Demos 2.3学习笔记(10)-- Views-WebView

2024-02-22 06:32

本文主要是介绍API Demos 2.3学习笔记(10)-- Views-WebView,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WebView是一个专门用来显示网页的View子类。它使用WebKit渲染引擎来显示网页,并且支持包括前进,后退,放大,缩小,文本搜索等多种功能。
WebView有一个辅助类叫WebSettings,它管理WebView的设置状态。该类的对象可以通过WebView.getSettings()方法获得。下面我们介绍几个常用的WebSettings设置:
view plainprint?
//得到WebView对象 
WebView mWebView = (WebView) findViewById(R.id.wv1); 
 
//通过WebView得到WebSettings对象 
WebSettings mWebSettings = mWebView.getSettings(); 
 
//设置支持Javascript的参数 
mWebSettings.setJavaScriptEnabled(true); 
 
//设置可以支持缩放 
mWebSettings.setSupportZoom(true); 
 
//设置出现缩放工具 
mWebSettings.setBuiltInZoomControls(true); 
 
//设置默认缩放方式尺寸是far 
mWebSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR); 
 
//设置允许访问文件数据 
mWebSettings.setAllowFileAccess(true); 
 
//设置是否保存密码 
mWebSettings.setSavePassword(true); 
  
//设置网页默认编码 
Settings.setDefaultTextEncodingName(encoding); 
有关WebSettings更多的设置选项,请参考Android SDK的帮助文档。
下面我们结合实例,简单介绍下通过WebView访问网页的三种常用方法:loadUrl、loadData以及loadDataWithBaseURL。
1、public void loadUrl(String url)
loadUrl方法很简单,只需要提供一个参数,即url地址,就可以进行自动加载。
该方法适用于加载网页、网页图片、本地网页以及本地图片。具体参考如下:
view plainprint?
WebView wv = (WebView) findViewById(R.id.wv1); 
wv.requestFocus(); //请求焦点 
wv.getSettings().setJavaScriptEnabled(true); //设置是否支持JavaScript 
wv.getSettings().setSupportZoom(true); //设置是否支持缩放 
wv.getSettings().setBuiltInZoomControls(true); //设置是否显示内建缩放工具 
wv.getSettings().setSavePassword(true); //设置是否保存密码 
wv.loadUrl("http://www.baidu.com/");    //加载在线网页 
wv.loadUrl("http://www.2cto.com/uploadfile/2011/0930/20110930020727775.jpg"); //加载在线图片  
wv.loadUrl("file:///mnt/sdcard/Google.html"); //加载本地网页(SD卡根目录下) 
wv.loadUrl("http://www.2cto.com/uploadfile/2011/0930/20110930021037759.jpg");  //加载本地图片(SD卡根目录下) 
注:1、后面四句包含“loadUrl”的语句分别对应加载在线网页/在线图片/本地网页/本地图片四中情况,每种情况下只取其一。
2、对于sdcard中的本地网页和图片等资源,一般url地址以 “file:///mnt/sdcard/”开头;
3、对于android项目中assets目录下的本地网页和图片等资源, 一般url地址以 “ file:///android_asset/ "开头;

2、public void loadData(String data, String mimeType, String encoding)
loadData将指定的data加载到WebView中。由于本身机制的原因,该方法不能加载来自网络的内容。其中,data内的html代码中若含有以下四种字符'#', '%', '\', '?',则应该依次替换为%23, %25, %27, %3f 。 参数mimeType,即MIME Type,也就是该资源的媒体类型,可以取值text/html, image/jpeg等。参数 encoding为网页编码,可以取值utf-8, base64等。具体参考如下:
view plainprint?
final String mimeType = "text/html";   // image/jpeg  etc 
final String encoding = "utf-8";   //base64  etc 
String data = null; 
 
WebView wv = (WebView) findViewById(R.id.wv7); 
data = "<a href ='http://www.baidu.com/'>百度</a>";  //加载本地网页Html代码 
data = "loadData方法加载本地图片<img src ='http://www.2cto.com/uploadfile/2011/0930/20110930021037759.jpg' />";   //加载本地图片(SD卡根目录下) 
wv.requestFocus(); 
wv.getSettings().setDefaultTextEncodingName(encoding);  //对于data中含有中文字符的,必须加上这个设置,否则会乱码。 
wv.loadData(data, mimeType, encoding); 
注:1、中间两个data字段分别对应加载本地网页代码和本地图片的情况;
2、经过实际操作,发现前面文本超级链接的html代码可以正常显示。点击超级链接,调用外部web浏览器打开链接。
3、经过实际操作,发现后面的本地图片其实加载不上来,无法显示。
4、loadData方法中,如果data含有中文字符,则需要调用 setDefaultTextEncodingName方法来设置WebView的text指定编码。详情请点击阅读:《关于WebView的loadData方法》

3、public void loadDataWithBaseURL(String baseUrl, String data,  String mimeType, String encoding, String historyUrl)
loadDataWithBaseURL方法也是将指定的data加载到WebView中。由于本身机制的原因,该方法不能加载来自网络的内容。参数mimeType,即MIME Type,也就是该资源的媒体类型,可以取值text/html, image/jpeg等。参数 encoding为网页编码,可以取值utf-8, base64等。参数baseUrl为基础目录,data中的文件路径可以是相对于基础目录的相对目录。例如:文件http://www.2cto.com/uploadfile/2011/0930/20110930021037759.jpg,baseUrl为file:///mnt/sdcard/,那么data中就可以直接引用图片 Googles_13th_Birthday-2011-hp.jpg了。参数historyUrl用作历史记录的字段,可以设置为null。具体参考如下:
view plainprint?
final String mimeType = "text/html";   // image/jpeg  etc 
final String encoding = "utf-8";   //base64  etc 
 
String baseUrl = null; 
String data = null; 
 
WebView wv = (WebView) findViewById(R.id.wv9); 
baseUrl = "file:///mnt/sdcard/";   //网页基础目录 
data = "<a href='Google.html'>谷歌</a>";  //加载本地网页Html代码(SD卡根目录下) 
data = "<img src ='Googles_13th_Birthday-2011-hp.jpg' />";  //:加载本地图片(SD卡根目录下) 
wv.requestFocus();                 
wv.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, null); 
注:中间两个data字段分别对应加载本地网页和本地图片的情况。经过测试,网页和本地图片都能正常加载。


下面我们进行实例代码解析:
res-layout-webview_1.xml
view plainprint?
<?xml version="1.0" encoding="utf-8"?> 
 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"  
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
     
    <!--一个线性垂直布局,包含十个WebView对象 --> 
    <LinearLayout 
        android:orientation="vertical" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 
         
        <WebView android:id="@+id/wv1" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv2" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv3" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv4" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv5" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv6" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
     
        <WebView android:id="@+id/wv7" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv8" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv9" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
             
        <WebView android:id="@+id/wv10" 
            android:layout_height="wrap_content" 
            android:layout_width="match_parent" 
            /> 
    </LinearLayout> 
         
 </ScrollView>         

src-com.example.android.apis.view-WebView1.java
view plainprint?
package com.example.android.apis.view; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
 
import com.example.android.apis.R; 
 
 
/**
 *<pre>WebView组件(mWebView)有一个辅助类叫WebSettings,它管理WebView的设置状态。
 *该对象可以通过WebView.getSettings()方法获得。
 
 *得到WebSettings对象,设置支持Javascript的参数
 *mWebView.getSettings().setJavaScriptEnabled(true);
 
 *设置可以支持缩放
 *mWebView.getSettings().setSupportZoom(true);
 
 *设置默认缩放方式尺寸是far
 *mWebView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
 
 *设置允许访问文件数据
 *mWebView.getSettings().setAllowFileAccess(true);
 
 *设置是否保存密码
 *mWebView.getSettings().setSavePassword(true);
  
 *设置网页默认编码
 *mWebView.getSettings().setDefaultTextEncodingName(encoding);
 
 *设置出现缩放工具
 *mWebView.getSettings().setBuiltInZoomControls(true);</pre>
 * 
 */ 
public class WebView1 extends Activity { 
     
    @Override 
    public void onCreate(Bundle icicle) { 
        super.onCreate(icicle); 
         
        setContentView(R.layout.webview_1); 
         
        final String mimeType = "text/html";   // image/jpeg  etc 
        final String encoding = "utf-8";   //base64  etc 
 
        WebView wv = null; 
        String baseUrl = null; 
        String data = null; 
 
        //加载在线网页 
        wv = (WebView) findViewById(R.id.wv1); 
        wv.requestFocus(); //请求焦点 
        wv.getSettings().setJavaScriptEnabled(true); //设置是否支持JavaScript 
        wv.getSettings().setSupportZoom(true); //设置是否支持缩放 
        wv.getSettings().setBuiltInZoomControls(true); //设置是否显示内建缩放工具 
        wv.getSettings().setSavePassword(true); //设置是否保存密码 
        wv.loadUrl("http://www.baidu.com/"); 
         
        //加载在线图片        
        wv = (WebView) findViewById(R.id.wv2); 
        wv.requestFocus();         
        wv.loadUrl("http://www.2cto.com/uploadfile/2011/0930/20110930020727775.jpg"); 
      
        //加载本地网页(SD卡根目录下) 
        wv = (WebView) findViewById(R.id.wv3); 
        wv.requestFocus();                 
        wv.loadUrl("file:///mnt/sdcard/Google.html"); 
     
        //加载本地图片(SD卡根目录下) 
        wv = (WebView) findViewById(R.id.wv4); 
        wv.requestFocus();                 
        wv.loadUrl("http://www.2cto.com/uploadfile/2011/0930/20110930021037759.jpg"); 
 
        //加载在线网页失败,把网页地址当作字符串处理 
        wv = (WebView) findViewById(R.id.wv5); 
        data = "http://www.baidu.com/"; 
        wv.requestFocus();                 
        wv.loadData(data, mimeType, encoding); 
        
        //加载在线图片失败,只显示一个默认图片进行替换                
        wv = (WebView) findViewById(R.id.wv6); 
        data = "http://www.2cto.com/uploadfile/2011/0930/20110930020727775.jpg";  
        wv.requestFocus();                 
        wv.loadData(data, mimeType, encoding); 
 
        //加载本地网页Html代码,可以显示超级链接。点击,调用外部浏览器打开该链接。 
        wv = (WebView) findViewById(R.id.wv7); 
        data = "<a href ='http://www.baidu.com/'>百度</a>"; 
        wv.requestFocus(); 
        wv.getSettings().setDefaultTextEncodingName(encoding);  //对于data中含有中文字符的,必须加上这个设置,否则会乱码。 
        wv.loadData(data, mimeType, encoding); 
    
        //加载本地图片(SD卡根目录下) 
        wv = (WebView) findViewById(R.id.wv8); 
        data = "loadData方法加载本地图片<img src ='http://www.2cto.com/uploadfile/2011/0930/20110930021037759.jpg' />"; 
        wv.requestFocus();        
        wv.getSettings().setDefaultTextEncodingName(encoding); //对于data中含有中文字符的,必须加上这个设置,否则会乱码。 
        wv.loadData(data, mimeType, encoding); 
         
        //loadDataWithBaseURL方法:加载本地网页Html代码(SD卡根目录下),可以显示超级链接。点击直接显示本地网页内容。 
        wv = (WebView) findViewById(R.id.wv9); 
        baseUrl = "file:///mnt/sdcard/";   //网页基础目录 
        data = "<a href='Google.html'>谷歌</a>";  //相对路径,相对基础目录而言 
        wv.requestFocus();                 
        wv.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, null); 
         
        //loadDataWithBaseURL方法:加载本地图片(SD卡根目录下),默认直接显示该图片 
        wv = (WebView) findViewById(R.id.wv10); 
        baseUrl = "file:///mnt/sdcard/";  //网页基础目录 
        data = "<img src ='Googles_13th_Birthday-2011-hp.jpg' />";  //相对路径,相对基础目录而言 
        wv.requestFocus();                 
        wv.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, null);          
    } 

关于WebView更详细的用法介绍,请点击阅读:《超好的webview学习资料》

预览效果:

\

这篇关于API Demos 2.3学习笔记(10)-- Views-WebView的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734395

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3