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

2023-10-14 00:58

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

更多精彩内容,请点击阅读:《API Demos 2.3 学习笔记》


WebView是一个专门用来显示网页的View子类。它使用WebKit渲染引擎来显示网页,并且支持包括前进,后退,放大,缩小,文本搜索等多种功能。

WebView有一个辅助类叫WebSettings,它管理WebView的设置状态。该类的对象可以通过WebView.getSettings()方法获得。下面我们介绍几个常用的WebSettings设置:

[java] view plaincopy
  1. //得到WebView对象  
  2. WebView mWebView = (WebView) findViewById(R.id.wv1);  
  3.   
  4. //通过WebView得到WebSettings对象  
  5. WebSettings mWebSettings = mWebView.getSettings();  
  6.   
  7. //设置支持Javascript的参数  
  8. mWebSettings.setJavaScriptEnabled(true);  
  9.   
  10. //设置可以支持缩放  
  11. mWebSettings.setSupportZoom(true);  
  12.   
  13. //设置出现缩放工具  
  14. mWebSettings.setBuiltInZoomControls(true);  
  15.   
  16. //设置默认缩放方式尺寸是far  
  17. mWebSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR);  
  18.   
  19. //设置允许访问文件数据  
  20. mWebSettings.setAllowFileAccess(true);  
  21.   
  22. //设置是否保存密码  
  23. mWebSettings.setSavePassword(true);  
  24.    
  25. //设置网页默认编码  
  26. Settings.setDefaultTextEncodingName(encoding);  
有关WebSettings更多的设置选项,请参考Android SDK的帮助文档。
下面我们结合实例,简单介绍下通过WebView访问网页的三种常用方法:loadUrl、loadData以及loadDataWithBaseURL。

一、public void loadUrl(String url) 
loadUrl方法很简单,只需要提供一个参数,即url地址,就可以进行自动加载。
该方法适用于加载网页、网页图片、本地网页以及本地图片。具体参考如下:

[java] view plaincopy
  1. WebView wv = (WebView) findViewById(R.id.wv1);  
  2. wv.requestFocus(); //请求焦点  
  3. wv.getSettings().setJavaScriptEnabled(true); //设置是否支持JavaScript  
  4. wv.getSettings().setSupportZoom(true); //设置是否支持缩放  
  5. wv.getSettings().setBuiltInZoomControls(true); //设置是否显示内建缩放工具  
  6. wv.getSettings().setSavePassword(true); //设置是否保存密码  
  7. wv.loadUrl("http://www.baidu.com/");    //加载在线网页  
  8. wv.loadUrl("http://www.google.com/logos/2011/Googles_13th_Birthday-2011-hp.jpg"); //加载在线图片   
  9. wv.loadUrl("file:///mnt/sdcard/Google.html"); //加载本地网页(SD卡根目录下)  
  10. wv.loadUrl("file:///mnt/sdcard/Googles_13th_Birthday-2011-hp.jpg");  //加载本地图片(SD卡根目录下)  

注:

1、后面四句包含“loadUrl”的语句分别对应加载在线网页/在线图片/本地网页/本地图片四中情况,每种情况下只取其一。

2、对于sdcard中的本地网页和图片等资源,一般url地址以 “file:///mnt/sdcard/”开头。
3、对于android项目中assets目录下的本地网页和图片等资源, 一般url地址以 “ file:///android_asset/ "开头。


二、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等。具体参考如下:

[java] view plaincopy
  1. final String mimeType = "text/html";   // image/jpeg  etc  
  2. final String encoding = "utf-8";   //base64  etc  
  3. String data = null;  
  4.   
  5. WebView wv = (WebView) findViewById(R.id.wv7);  
  6. data = "<a href ='http://www.baidu.com/'>百度</a>";  //加载本地网页Html代码  
  7. data = "loadData方法加载本地图片<img src ='file:///mnt/sdcard/Googles_13th_Birthday-2011-hp.jpg' />";   //加载本地图片(SD卡根目录下)  
  8. wv.requestFocus();  
  9. wv.getSettings().setDefaultTextEncodingName(encoding);  //对于data中含有中文字符的,必须加上这个设置,否则会乱码。  
  10. wv.loadData(data, mimeType, encoding);  

注:

1、中间两个data字段分别对应加载本地网页代码和本地图片的情况。

2、经过实际操作,发现前面文本超级链接的html代码可以正常显示。点击超级链接,调用外部web浏览器打开链接。
3、经过实际操作,发现后面的本地图片其实加载不上来,无法显示。
4、loadData方法中,如果data含有中文字符,则需要调用 setDefaultTextEncodingName方法来设置WebView的text指定编码。详情请点击阅读:《关于WebView的loadData方法》


三、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中的文件路径可以是相对于基础目录的相对目录。例如:文件file:///mnt/sdcard/Googles_13th_Birthday-2011-hp.jpg,baseUrl为file:///mnt/sdcard/,那么data中就可以直接引用图片 Googles_13th_Birthday-2011-hp.jpg了。参数historyUrl用作历史记录的字段,可以设置为null。具体参考如下:

[java] view plaincopy
  1. final String mimeType = "text/html";   // image/jpeg  etc  
  2. final String encoding = "utf-8";   //base64  etc  
  3.   
  4. String baseUrl = null;  
  5. String data = null;  
  6.   
  7. WebView wv = (WebView) findViewById(R.id.wv9);  
  8. baseUrl = "file:///mnt/sdcard/";   //网页基础目录  
  9. data = "<a href='Google.html'>谷歌</a>";  //加载本地网页Html代码(SD卡根目录下)  
  10. data = "<img src ='Googles_13th_Birthday-2011-hp.jpg' />";  //:加载本地图片(SD卡根目录下)  
  11. wv.requestFocus();                  
  12. wv.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, null);  
注:中间两个data字段分别对应加载本地网页和本地图片的情况。经过测试,网页和本地图片都能正常加载。


下面我们进行实例代码解析:
res-layout-webview_1.xml
[java] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="match_parent"   
  5.     android:layout_height="wrap_content"  
  6.     android:orientation="vertical">  
  7.       
  8.     <!--一个线性垂直布局,包含十个WebView对象 -->  
  9.     <LinearLayout  
  10.         android:orientation="vertical"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="wrap_content">  
  13.           
  14.         <WebView android:id="@+id/wv1"  
  15.             android:layout_height="wrap_content"  
  16.             android:layout_width="match_parent"  
  17.             />  
  18.               
  19.         <WebView android:id="@+id/wv2"  
  20.             android:layout_height="wrap_content"  
  21.             android:layout_width="match_parent"  
  22.             />  
  23.               
  24.         <WebView android:id="@+id/wv3"  
  25.             android:layout_height="wrap_content"  
  26.             android:layout_width="match_parent"  
  27.             />  
  28.               
  29.         <WebView android:id="@+id/wv4"  
  30.             android:layout_height="wrap_content"  
  31.             android:layout_width="match_parent"  
  32.             />  
  33.               
  34.         <WebView android:id="@+id/wv5"  
  35.             android:layout_height="wrap_content"  
  36.             android:layout_width="match_parent"  
  37.             />  
  38.               
  39.         <WebView android:id="@+id/wv6"  
  40.             android:layout_height="wrap_content"  
  41.             android:layout_width="match_parent"  
  42.             />  
  43.       
  44.         <WebView android:id="@+id/wv7"  
  45.             android:layout_height="wrap_content"  
  46.             android:layout_width="match_parent"  
  47.             />  
  48.               
  49.         <WebView android:id="@+id/wv8"  
  50.             android:layout_height="wrap_content"  
  51.             android:layout_width="match_parent"  
  52.             />  
  53.               
  54.         <WebView android:id="@+id/wv9"  
  55.             android:layout_height="wrap_content"  
  56.             android:layout_width="match_parent"  
  57.             />  
  58.               
  59.         <WebView android:id="@+id/wv10"  
  60.             android:layout_height="wrap_content"  
  61.             android:layout_width="match_parent"  
  62.             />  
  63.     </LinearLayout>  
  64.           
  65.  </ScrollView>          

src-com.example.android.apis.view-WebView1.java
[java] view plaincopy
  1. package com.example.android.apis.view;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.webkit.WebView;  
  6.   
  7. import com.example.android.apis.R;  
  8.   
  9.   
  10. /** 
  11.  *<pre>WebView组件(mWebView)有一个辅助类叫WebSettings,它管理WebView的设置状态。 
  12.  *该对象可以通过WebView.getSettings()方法获得。 
  13.  
  14.  *得到WebSettings对象,设置支持Javascript的参数 
  15.  *mWebView.getSettings().setJavaScriptEnabled(true); 
  16.  
  17.  *设置可以支持缩放 
  18.  *mWebView.getSettings().setSupportZoom(true); 
  19.  
  20.  *设置默认缩放方式尺寸是far 
  21.  *mWebView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR); 
  22.  
  23.  *设置允许访问文件数据 
  24.  *mWebView.getSettings().setAllowFileAccess(true); 
  25.   
  26.  *设置是否保存密码 
  27.  *mWebView.getSettings().setSavePassword(true); 
  28.    
  29.  *设置网页默认编码 
  30.  *mWebView.getSettings().setDefaultTextEncodingName(encoding); 
  31.   
  32.  *设置出现缩放工具 
  33.  *mWebView.getSettings().setBuiltInZoomControls(true);</pre> 
  34.  *  
  35.  */  
  36. public class WebView1 extends Activity {  
  37.       
  38.     @Override  
  39.     public void onCreate(Bundle icicle) {  
  40.         super.onCreate(icicle);  
  41.           
  42.         setContentView(R.layout.webview_1);  
  43.           
  44.         final String mimeType = "text/html";   // image/jpeg  etc  
  45.         final String encoding = "utf-8";   //base64  etc  
  46.   
  47.         WebView wv = null;  
  48.         String baseUrl = null;  
  49.         String data = null;  
  50.   
  51.         //加载在线网页  
  52.         wv = (WebView) findViewById(R.id.wv1);  
  53.         wv.requestFocus(); //请求焦点  
  54.         wv.getSettings().setJavaScriptEnabled(true); //设置是否支持JavaScript  
  55.         wv.getSettings().setSupportZoom(true); //设置是否支持缩放  
  56.         wv.getSettings().setBuiltInZoomControls(true); //设置是否显示内建缩放工具  
  57.         wv.getSettings().setSavePassword(true); //设置是否保存密码  
  58.         wv.loadUrl("http://www.baidu.com/");  
  59.           
  60.         //加载在线图片         
  61.         wv = (WebView) findViewById(R.id.wv2);  
  62.         wv.requestFocus();          
  63.         wv.loadUrl("http://www.google.com/logos/2011/Googles_13th_Birthday-2011-hp.jpg");  
  64.        
  65.         //加载本地网页(SD卡根目录下)  
  66.         wv = (WebView) findViewById(R.id.wv3);  
  67.         wv.requestFocus();                  
  68.         wv.loadUrl("file:///mnt/sdcard/Google.html");  
  69.       
  70.         //加载本地图片(SD卡根目录下)  
  71.         wv = (WebView) findViewById(R.id.wv4);  
  72.         wv.requestFocus();                  
  73.         wv.loadUrl("file:///mnt/sdcard/Googles_13th_Birthday-2011-hp.jpg");  
  74.   
  75.         //加载在线网页失败,把网页地址当作字符串处理  
  76.         wv = (WebView) findViewById(R.id.wv5);  
  77.         data = "http://www.baidu.com/";  
  78.         wv.requestFocus();                  
  79.         wv.loadData(data, mimeType, encoding);  
  80.          
  81.         //加载在线图片失败,只显示一个默认图片进行替换                 
  82.         wv = (WebView) findViewById(R.id.wv6);  
  83.         data = "http://www.google.com/logos/2011/Googles_13th_Birthday-2011-hp.jpg";   
  84.         wv.requestFocus();                  
  85.         wv.loadData(data, mimeType, encoding);  
  86.   
  87.         //加载本地网页Html代码,可以显示超级链接。点击,调用外部浏览器打开该链接。  
  88.         wv = (WebView) findViewById(R.id.wv7);  
  89.         data = "<a href ='http://www.baidu.com/'>百度</a>";  
  90.         wv.requestFocus();  
  91.         wv.getSettings().setDefaultTextEncodingName(encoding);  //对于data中含有中文字符的,必须加上这个设置,否则会乱码。  
  92.         wv.loadData(data, mimeType, encoding);  
  93.      
  94.         //加载本地图片(SD卡根目录下)  
  95.         wv = (WebView) findViewById(R.id.wv8);  
  96.         data = "loadData方法加载本地图片<img src ='file:///mnt/sdcard/Googles_13th_Birthday-2011-hp.jpg' />";  
  97.         wv.requestFocus();         
  98.         wv.getSettings().setDefaultTextEncodingName(encoding); //对于data中含有中文字符的,必须加上这个设置,否则会乱码。  
  99.         wv.loadData(data, mimeType, encoding);  
  100.           
  101.         //loadDataWithBaseURL方法:加载本地网页Html代码(SD卡根目录下),可以显示超级链接。点击直接显示本地网页内容。  
  102.         wv = (WebView) findViewById(R.id.wv9);  
  103.         baseUrl = "file:///mnt/sdcard/";   //网页基础目录  
  104.         data = "<a href='Google.html'>谷歌</a>";  //相对路径,相对基础目录而言  
  105.         wv.requestFocus();                  
  106.         wv.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, null);  
  107.           
  108.         //loadDataWithBaseURL方法:加载本地图片(SD卡根目录下),默认直接显示该图片  
  109.         wv = (WebView) findViewById(R.id.wv10);  
  110.         baseUrl = "file:///mnt/sdcard/";  //网页基础目录  
  111.         data = "<img src ='Googles_13th_Birthday-2011-hp.jpg' />";  //相对路径,相对基础目录而言  
  112.         wv.requestFocus();                  
  113.         wv.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, null);           
  114.     }  
  115. }  

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


预览效果:

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



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

相关文章

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个