当前位置: 首页 > news >正文

Android学习之WebView

什么是WebView

WebView是Android中UI组件的一种,WebView基于webkit内核,不过由于兼容性的原因在Android5.0后改为了Chromium内核。
WebView可以用来展示网页,常用于我们不想打开浏览器但又想浏览网页的情况。

WebView的使用

WebVeiw的常用方法

加载网页的四种方式

loadUrl(String url)

 //打开百度网页webView.loadUrl("https://www.baidu.com/");//打开sdcard卡的html页面//webView.loadUrl("file://" + Environment.getExternalStorageDirectory() + "/1/index.html");//资源文件下的html页面//webView.loadUrl("file://android_asset/index.html");//设置在当前页面打开要显示的网页webView.setWebViewClient(new WebViewClient());

loadUrl(String url, Map<String, String> additionalHttpHeaders)
第一个参数是要加载网页的url,第二个参数是键值对形式的请求参数,会被加入到请求头中。

  webView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {Map<String,String> reqHeaders = new HashMap<>();reqHeaders.put("android-webview-demo","testRequestHeaders");webView.loadUrl("https://www.baidu.com/");return super.shouldOverrideUrlLoading(view, url);}});

loadData(String data, String mimeType, String encoding)
可以将一段html代码加载到网页中

 webView.loadData("<h1>hello world</h1>","text/html","utf-8");

loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
这里要加载的网页的url是baseUrl+data,mimeType是响应类型,encoding是编码,historyUrl设置回退时回退到哪个网页

    webView.loadDataWithBaseURL("https://www.imooc.com/","<img src = \"static/img/index/logo2020.png\"/> <a href = \"https://www.baidu.com\">百度</a>","text/html","utf-8","https://www.sogou.com");webView.setWebViewClient(new WebViewClient());

控制网页的前进和后退

boolean canGoBack():是否可以后退;
boolean canGoForward():是否可以前进;
boolean canGoBackOrForward(int steps):是否可以前进或后退一定步数,负数代表后退,正数代表前进;
void clearHistory():清除历史;
void goBack():后退;
void goForward():前进;
void goBackOrForward(int steps):前进或后退一定步数,负数代表后退,正数代表前进;

public void onClear(View view) {webView.clearHistory();}public void onCanBack(View v) {Toast.makeText(this,String.valueOf(webView.canGoBack()),Toast.LENGTH_SHORT).show();}public void onGoBack(View v) {webView.goBack();}public void onCanGoForward(View v) {Toast.makeText(this,String.valueOf(webView.canGoForward()),Toast.LENGTH_SHORT).show();}public void onGoForward(View v) {webView.goForward();}public void onCanGoBackOrForward(View v) {int steps = Integer.valueOf(et.getText().toString());Toast.makeText(this,String.valueOf(webView.canGoBackOrForward(steps)),Toast.LENGTH_SHORT).show();}public void onGoBackOrForward(View v) {int steps = Integer.valueOf(et.getText().toString());webView.goBackOrForward(steps);}

WebView的状态管理

WebView的状态管理用于
WebView的
onPause():
onResume():
resumeTimers():
pauseTimers():
destroy():

WebSettings

使用WebSettings可以对webview进行配置和管理。
控制网页的缩放
setSupportZoom(boolean):是否支持缩放
setBuiltInZoomControls(boolean):设置内置的缩放控件
setDisplayZoomControls(boolean):是否隐藏原生的缩放控件
控制网页缓存策略
LOAD_CACHE_ONLY:永远不使用网络,只去本地缓存,没有缓存则不会加载;
LOAD_CACHE_ELSE_NETWORK:只要本地有缓存,无论是否过期都会去使用本地缓存,没有缓存才会去加载网络;
LOAD_DEFAULT:根据cache-control决定是否从网络获取;
LOAD_NO_CACHE:永远不使用缓存,只从网络获取;

  WebSettings settings = webView.getSettings();//设置要访问的页面可以运行jssettings.setJavaScriptEnabled(true);//设置可以进行缩放settings.setSupportZoom(true);settings.setBuiltInZoomControls(true);settings.setDisplayZoomControls(true);//设置缓存策略settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);

WebViewClient

WebViewClient处理加载时的各种回调通知。

方法签名作用
WebResourceResponse shouldInterceptRequest(WebViewview, String url)进行资源请求的时候回调
void onPageStarted(WebViewview, String url, Bitmap favicon)网页已经开始加载的时候回调
void onLoadResource(WebViewview, String url)加载网页资源之前回调
boolean shouldOverrideUrlLoading(WebView view, String url)webview将要加载新的url时进行回调
void onReceivedError(WebViewview, interrorCode, String description, String failingUrl)网页访问发生错误的时候回调
void onPageFinished(WebViewview, String url)网页加载完成的时候回调
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)重载方法,在Android7.0以后才能使用
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)重载方法,在Android5.0以上才能使用
void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)重载方法,Android6.0及以上才能使用
shouldInterceptRequest方法会在onLoadResource方法之前被调用。
webView.setWebViewClient(new WebViewClient() {@Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {super.onReceivedError(view, request, error);}@Overridepublic void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {super.onReceivedError(view, errorCode, description, failingUrl);}/*** android7.0以上才可以使用,可以利用此方法进行方法拦截* @param view* @param request* @return*/@Overridepublic boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {return super.shouldOverrideUrlLoading(view, request);}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {Map<String,String> reqHeaders = new HashMap<>();reqHeaders.put("android-webview-demo","testReqHeaders");webView.loadUrl("http://192.168.2.124:3000", reqHeaders);return super.shouldOverrideUrlLoading(view, url);}/*** android5.0以上才能调用* @param view* @param request* @return*/@Nullable@Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {Log.d(TAG, "shouldInterceptRequest: 方法被调用了");return super.shouldInterceptRequest(view, request);}@Nullable@Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, String url) {Log.d(TAG, "shouldInterceptRequest: 方法被调用了" + url);return super.shouldInterceptRequest(view, url);}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {Log.d(TAG, "onPageStarted: 网页开始进行加载url: " + url);super.onPageStarted(view, url, favicon);}@Overridepublic void onLoadResource(WebView view, String url) {Log.d(TAG, "onLoadResource:网页开始加载资源url: " + url);super.onLoadResource(view, url);}@Overridepublic void onPageFinished(WebView view, String url) {Log.d(TAG, "onPageFinished: 网页已经加载完成: " + url);super.onPageFinished(view, url);}});

WebChromeClient

辅助webview去处理JavaScript对话框、标题、进度。

booleanonJsAlert(WebViewview, String url, String message, JsResultresult):在网页将要打开一个alert警告对话框的时候回调;
booleanonJsPrompt(WebViewview, String url, String message, String defaultValue, JsPromptResultresult):在网页将要打开一个prompt对话框的时候回调;
booleanonJsConfirm(WebViewview, String url, String message, JsResultresult):在网页将要打开一个confirm对话框的时候回调;

相关文章:

Android学习之WebView

什么是WebView WebView是Android中UI组件的一种&#xff0c;WebView基于webkit内核&#xff0c;不过由于兼容性的原因在Android5.0后改为了Chromium内核。 WebView可以用来展示网页&#xff0c;常用于我们不想打开浏览器但又想浏览网页的情况。 WebView的使用 WebVeiw的常用…...

3/11 考试总结

时间安排 7:30–7:50 读题&#xff0c;T1 是个利用随机性的题目&#xff0c;T2 dp,T3 不知道是啥。 7:50–8:30 T1,对于随机有个结论时最值突变不超过 log &#xff0c;于是可以处理出所有 log 个区间然后统计答案&#xff0c;但这暴力做是个 3log 铁定过不去。 8:30–8:50 T2…...

Leetcode 141.环形链表 142环形链表II

141环形链表 文章目录快慢指针快慢指针 代码思路&#xff1a; slow 和fast 指向 head slow走一步&#xff0c;fast走两步 没有环&#xff1a; fast每次走2步 &#xff0c;如果 fast 最终遇到NULL(链表中的元素是 偶数)或者fast->next(链表中的元素是 奇数)遇到NULL&#xf…...

hibernate学习(五)

hibernate学习&#xff08;五&#xff09; hibernate的一对多关联映射&#xff1a; 一、数据库表与表之间关系 一对多建表原则&#xff1a; 多对多的建表原则&#xff1a; 一对一建表原则&#xff1a; &#xff08;1&#xff09;唯一外键对应&#xff1a; &#xff08;…...

STM32CubeIDE 快速开发入门指南

描述 STM32CubeIDE是一体式多操作系统开发工具&#xff0c;是STM32Cube软件生态系统的一部分。 STM32CubeIDE是一种高级C/C开发平台&#xff0c;具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse/CDT™框架和用于开发的GCC工具链&#xf…...

华为OD机试 - 火星文计算(C 语言解题)【独家】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:火星文计…...

超超超超保姆式详解——字符函数和字符串函数(学不会打我)上

目录 长度不受限制的字符串函数 strlen部分 strlen函数的易错小知识 strlen函数的实现 strcpy部分 strcat部分 自己实现strcat strstr函数部分 简单例子&#xff1a; 分析 strcmp部分 长度受限制的字符串函数 strncpy 简单例子 strncat strncmp 简单例子 &…...

Data mesh 笔记

有用的网站 https://www.datamesh-architecture.com/ https://www.agilelab.it/data-mesh-in-action https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/cloud-scale-analytics/well-architected-framework https://www.datamesh-architecture.com…...

(八十三)大白话透彻研究通过explain命令得到的SQL执行计划(2)

今天我们就一步一步的来讲解不同的SQL语句的执行计划长什么样子&#xff0c;先来看第一条SQL语句&#xff0c;特别的简单&#xff0c;就是&#xff1a; explain select * from t1 就这么一个简单的SQL语句&#xff0c;那么假设他这个里面有大概几千条数据&#xff0c;此时执行计…...

案例18-面向对象之开门小例子

目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 1.面向过程 2.面向对象 3.面向对象(反射) 三&#xff1a;过程 1.面向过程&#xff1a;原本何老师的作用交给我了米老师来完成。 2.面向对象&#xff1a;把开门的方法完全交个何老师&#xff0c;米老师不需要有…...

【碎片化知识总结】三月第一周

目录 前言 1、开发中常用的 IDEA 编辑器&#xff0c;如何做到不用每次都重新配置&#xff1f; 2、如何使用 Python 获取视频文件信息&#xff1f; 3、使用 Java 的 try-with-resources 优化代码 4、使用 shell 脚本批量修改服务器某一目录下的文件后缀名称 5、MySQL优化&…...

从零开始的JSON库(1):启程

1. JSON 是什么 JSON&#xff08;JavaScript Object Notation&#xff09;是一个用于数据交换的文本格式&#xff0c;现时的标准为ECMA-404 。 虽然 JSON 源自于 JavaScript 语言&#xff0c;但它只是一种数据格式&#xff0c;可用于任何编程语言。现时具有类似功能的格式有X…...

【Java】数组

目录 1.数组的定义与初始化 2.遍历数组 3.认识null 4.引用变量 5.返回多个值 6.数组拷贝 7.数组逆序 8.数组填充 9.小练习 //将整形数组转化为字符串 //二分查找优化 //冒泡排序优化 10.二维数组 //遍历二维数组 //不规则的二维数组 1.数组的定义与初始化 int…...

【C++】非类型的模板参数,特化

目录 1.类型模板参数和非类型模板参数 2.特化 3. 模板的分离编译 4.模板的优缺点 1.类型模板参数和非类型模板参数 之前写模板传的都是类型——类型模板参数 现在想定义两个静态数组&#xff0c;数组长度不同&#xff0c;就可以用模板参数传数值而不是传类型 非类型模板…...

核方法(kernel Method)

核方法 核方法定义 一种能够将在原始数据空间中的非线性数据映射到高维线性可分的方法。 核方法的用处 1、低维数据非线性&#xff0c;当其映射到高维空间&#xff08;feature space&#xff09;时&#xff0c;可以用线性方法对数据进行处理。 2、线性学习器相对于非线性学…...

消息队列MQ用来做什么的,市场上主流的四大MQ如何选择?RabbitMQ带你HelloWorld!

文章目录MQ用来做什么的MQ会有什么样的麻烦MQ消息队列模式分类MQ消息队列常用协议市场主流四大MQRabbitMQ项目开发RabbitMQ中的组成部分MQ用来做什么的 省流 &#xff1a;系统解耦、异步调用、流量削峰 系统解耦 首先举例下面这个场景&#xff0c;现有ABCDE五个系统&#xff…...

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E

2023年中国高校计算机大赛-团队程序设计天梯赛&#xff08;GPLT&#xff09;上海理工大学校内选拔赛&#xff08;同步赛) 文章目录A -- A Xor B Problem题目分析codeB -- 吃苹果题目分析codeC -- n皇后问题题目分析codeD -- 分苹果题目分析codeE -- 完型填空题目分析codeA – A…...

一文分析Linux v4l2框架

说明&#xff1a; Kernel版本&#xff1a;4.14 ARM64处理器&#xff0c;Contex-A53&#xff0c;双核 使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 V4L2(Video for Linux 2)&#xff1a;Linux内核中关于视频设备驱动的框架&#xff0c;对上向应用层提供…...

MFC常用控件使用(文本框、编辑框、下拉框、列表控件、树控件)

简介 本文章主要介绍下MFC常用控件的使用&#xff0c;包括静态文本框(Static Text)、编辑框(Edit Control)、下拉框(Combo Box)、列表控件(List Control)、树控件(Tree Control)的使用。 创建项目 我们选择 文件->新建->新建项目&#xff0c;选择MFC程序 选择基于对话…...

13 node 程序后台执行加上 tail 命令, 中断 tail 命令, 同时也中断了 node 程序

前言 呵呵 最近帮朋友解决问题[2022.09.08] 需要启动一个 node 程序, 然后 需要一个 startUp.sh 脚本 然后 反手写了一个过去, 按道理 来说 应该是 后台启动了对应的 node 程序, 然后将 标准输出, 错误输出 输出到 logs/nohup.log 日志文件中, 然后基于 tail 命令 来查看 …...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...