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

webview全屏处理,即插即用

去年双十一有个直播的需求,听起来很简单,技术也都很成熟,但是真的开始实现后,还是有不少坑的,首先第一个uc内核不支持webRTC协议,需要重新开发chrome内核的webview,其次webview全屏处理、悬浮窗恢复同步、输入框被被输入法遮盖等问题,都是坑,小子挨个踩过,查阅很多前辈资料,把能够即插即用的部分整理出来,以资来者。

原理

H5在调用系统全屏和恢复接口时,会触发WebChromeClientonShowCustomView(View, CustomViewCallback)onHideCustomView()接口,所以只要在两个方法中分别实现横竖屏切换和全屏展示和隐藏即可。

其中需要注意的:
1、在onShowCustomView()中有个入参CustomViewCallback,这回调需要在全屏恢复时调用,以告知H5解决全屏展示。

2、布局中增加一个充满屏幕的控件,用以承载全屏的展示。

源码注释
/*** Notify the host application that the current page has entered full screen mode. After this* call, web content will no longer be rendered in the WebView, but will instead be rendered* in {@code view}. The host application should add this View to a Window which is configured* with {@link android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN} flag in order to* actually display this web content full screen.** <p>The application may explicitly exit fullscreen mode by invoking {@code callback} (ex. when* the user presses the back button). However, this is generally not necessary as the web page* will often show its own UI to close out of fullscreen. Regardless of how the WebView exits* fullscreen mode, WebView will invoke {@link #onHideCustomView()}, signaling for the* application to remove the custom View.** <p>If this method is not overridden, WebView will report to the web page it does not support* fullscreen mode and will not honor the web page's request to run in fullscreen mode.** <p class="note"><b>Note:</b> if overriding this method, the application must also override* {@link #onHideCustomView()}.** @param view is the View object to be shown.* @param callback invoke this callback to request the page to exit* full screen mode.*/
public void onShowCustomView(View view, CustomViewCallback callback) {};

Google源码的注释写的确实清楚,这个方法就是做了一件事儿: 更改渲染对象,新对象通过view传给原生。

但在调用时,需要注意:

  1. 宿主APP要配置全屏属性
  2. 在关闭全屏时,记得调用#onHideCustomView#onCustomViewHidden()

实现

布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><WebViewandroid:id="@+id/float_webview"android:layout_width="match_parent"android:layout_height="match_parent" /><FrameLayoutandroid:id="@+id/float_frameLayout"android:layout_width="match_parent"android:layout_height="match_parent"></FrameLayout>
</LinearLayout>
Java实现
private void setWebView(){mWebChromeClient = new WebChromeClient() {@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {super.onShowCustomView(view, callback);if (mCustomView != null) {callback.onCustomViewHidden(); // 通知H5全屏关闭return;}mCustomView = view; // 缓存全屏视图mFrameLayout.addView(mCustomView); // 向全屏控件添加全屏视图mCustomViewCallback = callback;mWebview.setVisibility(View.GONE); // 将已有webview控件隐藏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 切换横屏}@Overridepublic void onHideCustomView() {webview.setVisibility(View.VISIBLE);if (mCustomView == null) {return;}mCustomView.setVisibility(View.GONE);mFrameLayout.removeView(mCustomView);mCustomViewCallback.onCustomViewHidden(); // 通知H5全屏关闭mCustomView = null;setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // 切换竖屏super.onHideCustomView();}};mWebview.setWebChromeClient(mWebChromeClient);
}

参考

Android WebView 全屏播放视频

相关文章:

webview全屏处理,即插即用

去年双十一有个直播的需求&#xff0c;听起来很简单&#xff0c;技术也都很成熟&#xff0c;但是真的开始实现后&#xff0c;还是有不少坑的&#xff0c;首先第一个uc内核不支持webRTC协议&#xff0c;需要重新开发chrome内核的webview&#xff0c;其次webview全屏处理、悬浮窗…...

实录分享 | 央企大数据平台架构发展趋势与应用场景的介绍

分享嘉宾&#xff1a; 孟子涵-中国华能集团信息中心平台架构师 2021年华能就与Alluxio建立了合作&#xff0c;共同写了整个华能统一纳管的架构方案。这个方案我认为是现在我们在央企里边比较核心的一套体系&#xff0c;能让全集团所有我们认为重要的数字化资源实现真正的统一集…...

UE5 将类修改目录

有个需求&#xff0c;需要修改ue里面类的位置&#xff0c;默认在Public类下面&#xff0c;我想创建一个二级目录&#xff0c;将所有的类分好位置&#xff0c;方便查看。 上图为创建一个类所在的默认位置。 接下来&#xff0c;将其移动到一个新的目录中。 首先在资源管理器中找…...

GPT实战系列-ChatGLM3管理工具的API接口

GPT实战系列-ChatGLM3管理外部借力工具 用ChatGLM的工具可以实现很多查询接口和执行命令&#xff0c;外部工具该如何配置使用&#xff1f;如何联合它们实现大模型查询助手功能&#xff1f;例如调用工具实现股票信息查询&#xff0c;网络天气查询等助手功能。 LLM大模型相关文章…...

Python 列表、元组、字典区别

1.列表、元组和字典都是序列 2.列表字典可以修改和删除序列中的某个元素&#xff0c;而元组就是一个整体&#xff0c;不能修改和删除&#xff0c;一定要修改或删除的话&#xff0c;只能修改和删除整个元组。 3.既然元组不能删除和修改&#xff0c;有什么作用呢&#xff1f; 1…...

[足式机器人]Part2 Dr. CAN学习笔记 - Ch03 傅里叶级数与变换

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Ch03 傅里叶级数与变换 1. 三角函数的正交性2. 周期为 2 π 2\pi 2π的函数展开为傅里叶级数3. 周期为 2 L 2L 2L的函数展开4. 傅里叶级数的复数形式5. 从傅里叶级数推导傅里叶变换FT6. 总结 1. …...

你想使用域名访问一个ip的网页,你应该怎么办呢?

你想使用域名访问一个ip的网页,你应该怎么办呢? eg:你想用https://test.com/访问http://1.1.1.1/方法: eg:你想用https://test.com/访问http://1.1.1.1/ 方法: 1.首先,如果你是服务器的管理者,你需要在服务器的官网申请一个test.com的域名,然后在官网将域名映射到1.1.1.1上. …...

SAP存放状态的几个常用表

SAP存放状态的几个常用表 在sap中&#xff0c;包括订单、项目、计划、设备主数据等&#xff0c;存在审批流程的业务单据&#xff0c;这些业务对象都会有状态的属性&#xff0c;用来控制和约束该业务当前的操作。 主要的表 JEST&#xff1a;存放了该对象编号的当前状态 JCDS…...

AUTO SEG-LOSS SEARCHING METRIC SURROGATES FOR SEMANTIC SEGMENTATION

AUTO SEG-LOSS: 搜索度量替代语义分割 论文链接&#xff1a;https://arxiv.org/abs/2010.07930 项目链接&#xff1a;https://github.com/fundamentalvision/Auto-Seg-Loss ABSTRACT 设计合适的损失函数是训练深度网络的关键。特别是在语义分割领域&#xff0c;针对不同的场…...

openssl3.2 - 官方demo学习 - 索引贴

文章目录 openssl3.2 - 官方demo学习 - 索引贴概述笔记工程的搭建和调试环境BIOBIO - client-arg.cBIO - client-conf.cBIO - saccept.cBIO - sconnect.cBIO - server-arg.cBIO - server-cmod.cBIO - server-conf.cBIO - 总结certsciphercipher - aesccm.ccipher - aesgcm.ccip…...

textarea文本框根据输入内容自动适应高度

第一种&#xff1a; <el-input auto-completeoff typetextarea :autosize"{minRows:3,maxRows:10}" class"no-scroll"> </el-input> /* 页面的样式表 */ .no-scroll textarea {overflow: hidden; /* 禁用滚动条 */resize: none; /* 禁止用户…...

【JAVA基础--计算机网络】--TCP三次握手+四次挥手

三次握手四次挥手 写在前面1. 三次握手1.1 作用&#xff1a; 为了在不可靠的信道上建立起可靠的连接&#xff1b;1.2 建立过程1.3 面试提问 2. 四次挥手2.1 作用&#xff1a;为了在不可靠的网络信道中进行可靠的连接断开确认2.2 断开过程2.3 面试提问 写在前面 三次握手建立连…...

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建

最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事&#xff0c;Google 了 N 篇文章竟然没有一篇是可以跑起来的&#xff01; 少部分教程是给出了自我矛盾的配置&#xff08;是的&#xff0c;按照贴出来的代码和配置&#xff0c;他自己都跑不起来&#xff09;&#xff0c;大部…...

【漏洞复现】Hikvision SPON IP网络对讲广播系统存在命令执行漏洞CVE-2023-6895

漏洞描述 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版…...

微软为Windows内置记事本应用开发AI功能;2024年15个 AI 语音生成器

&#x1f989; AI新闻 &#x1f680; 微软为Windows内置记事本应用开发AI功能 摘要&#xff1a;微软正在开发一个新的生成式AI功能&#xff0c;名为"Cowriter"&#xff0c;用于Windows内置的记事本应用。该功能类似于画图应用中的"Cocreator"功能&#x…...

【C++进阶06】红黑树图文详解及C++模拟实现红黑树

一、红黑树的概念及性质 1.1 红黑树的概念 AVL树用平衡因子让树达到高度平衡 红黑树可以认为是AVL树的改良 通过给每个节点标记颜色让树接近平衡 以减少树在插入节点的旋转 在每个结点新增一个存储位表示结点颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上 各个结点…...

2023年最严重的10起0Day漏洞攻击事件

根据谷歌公司威胁分析小组去年 7 月发布的报告显示&#xff0c;2022 年全球共有 41 个 0day 漏洞被利用和披露。而研究人员普遍认为&#xff0c;2023 年被利用的 0Day 漏洞数量会比 2022 年更高&#xff0c;这些危险的漏洞被广泛用于商业间谍活动、网络攻击活动以及数据勒索攻击…...

Linux之Iptables简易应用

文档形成时期&#xff1a;2009-2024年 和iptables打交道有15年了&#xff0c;经过无数实践后&#xff0c;形成一个简易应用文档。 文档主题是简易应用&#xff0c;所以其原理不详述了。 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目…...

树状结构查询 - 华为OD统一考试

OD统一考试 分值: 200分 题解: Java / Python / C++ 题目描述 通常使用多行的节点、父节点表示一棵树,比如: 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点。 输入描述 第一行输入行数,下面是多行数据,每行以…...

版本控制系统教程

1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS&#xff0c;Subversion等不同&#xff…...

Java多线程并发篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、start 与 run 区别二、JAVA 后台线程三、什么是乐观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、start 与 r…...

模型\视图一般步骤:为什么经常要用“选择模型”QItemSelectionModel?

一、“使用视图”一般的步骤&#xff1a; //1.创建 模型(这里是数据模型&#xff01;) tabModelnew QSqlTableModel(this,DB);//数据表 //2.设置 视图的模型(这里是数据模型&#xff01;) ui->tableView->setModel(tabModel); 模型种类&#xff1a; QStringListModel…...

C#,愚弄数(Hoax Number)的计算方法与源代码

一、愚弄数&#xff08;Hoax Number&#xff09; 愚弄数&#xff08;Hoax Number&#xff09;是一种组合数字, 其数字总和等于其不同质因数的数字总和。 注&#xff1a;1不被视为质数, 因此它不包含在不同质因数的总和中。 有些愚弄数&#xff08;Hoax Number&#xff09;数字也…...

c JPEG编码,此程序没有处现MCU中亮度分量的排序

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…...

前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上&#xff0c;应用于vue3、typescript、vite2基础上延伸出来的扩展补充&#xff0c;持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…...

【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…...

RT-Thread基于AT32单片机的CAN应用

1 硬件电路 2 RT-Thread驱动配置 RT-Studio中没有CAN相关的图形配置&#xff0c;需要手动修改board.h。在board.h的末尾&#xff0c;增加相关的BSP配置。 #define RT_CAN_USING_HDR #define BSP_USING_CAN13 IO配置 at32_msp.c中的IO配置是PB9和PB10&#xff0c;掌上实验室V…...

LeetCode---121双周赛---数位dp

题目列表 2996. 大于等于顺序前缀和的最小缺失整数 2997. 使数组异或和等于 K 的最少操作次数 2998. 使 X 和 Y 相等的最少操作次数 2999. 统计强大整数的数目 一、大于等于顺序前缀和的最小缺失整数 简单的模拟题&#xff0c;只要按照题目的要求去写代码即可&#xff0c;…...

RT-Thread I/O设备模型

I/O设备模型 绝大部分的嵌入式系统都包括一些I/O&#xff08;Input/Output&#xff0c;输入/输出&#xff09;设备&#xff0c;例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡&#xff0c;以及网络设备的以太网接口等&#xff0c;都…...

CloudCompare——拟合空间球

目录 1.拟合球2.软件操作3.算法源码4.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——拟合空间球&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT生成的文章。 1.拟合球 源码里用到了四点定球&#xff0c;…...

网站验收流程/百度百科合作模式

2019独角兽企业重金招聘Python工程师标准>>> 个人主页&#xff1a; 记录自己的发展历程&#xff0c;包括自己的学习、工作、生活&#xff0c;希望自己努力奋进&#xff0c;不要荒废时光。 欢迎大家访问&#xff1a;http://www.xujiangfei.com 转载于:https://my.osc…...

浙江建筑信息港官网/免费测试seo

前几天微博发生了一起大的系统故障&#xff0c;很多技术的朋友都比较关心&#xff0c;其中的原因不会超出James Hamilton在On Designing and Deploying Internet-Scale Service(1)概括的那几个范围&#xff0c;James第一条经验“Design for failure”是所有互联网架构成功的一个…...

公司网站建设需要多少钱/进入百度

“ 本文业务角度分享了风控业务中构建关系特征的一些实践经验&#xff0c;包括数据源分析&#xff0c;关系网络和特征的构建&#xff0c;特征性能的评估以及线上方案的落实。”作者&#xff1a;求是汪在路上来源&#xff1a;知乎专栏 风控模型算法。编辑&#xff1a;happyGirl风…...

佛山 网站建设/站内推广和站外推广的区别

1 例子 故事&#xff1a;老王烧开水。 出场人物&#xff1a;老张&#xff0c;水壶两把&#xff08;普通水壶&#xff0c;简称水壶&#xff1b;会响的水壶&#xff0c;简称响水壶&#xff09;。 老王想了想&#xff0c;有好几种等待方式 1.老王用水壶煮水&#xff0c;并且站在那…...

网站运营推广方案/推广之家app下载

在ucenter进行备份出现 无法访问到该应用的备份接口&#xff0c;请拷贝 UCenter 根目录下api/dbbak.php 到该应用的api目录下 同时发现也discuz 通信失败。但是检查了 通信密钥: 都没有问题. 我的问题解决方案&#xff1a;已经自己解决了&#xff0c;给以后出现问题的人做参考…...

南昌公司做网站/360关键词排名百度

1、java反射概述JAVA反射机制是在运行状态中&#xff0c;对于任意一个实体类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机…...