WebView 视频播放,全屏按钮显示不出来,全屏后不能播放视频
最近项目的一个需求,需要在Webview 里面播放视频遇到了一些问题:
视频可以正常播放但是,视频底部的全屏按钮没了,只有一个音量按钮。修改后,点击全屏,视频不能播放。
接下来一 一解决:
问题1 :没有全屏按钮:
如图:可以看到只有一个音量按钮,没有全屏按钮。
查了一下资料,文档上写着支持视频播放的条件:
In order to support inline HTML5 video in your application,
you need to have hardware acceleration turned on, and set a WebChromeClient.
For full screen support,
implementations of onShowCustomView(View, WebChromeClient.CustomViewCallback)
and onHideCustomView() are required, getVideoLoadingProgressView() is optional.
意思就是:
1、要打开硬件加速
2、设置 WebChromeClient ,并实现 onShowCustomView() 方法和onHideCustomView()方法。
3、要支持全屏
接下来就是解决问题:
1、首先开启硬件加速
在AndroidMainfest.xml中,当前webView所在类的标签中添加 : android:hardwareAccelerated="true"
<activityandroid:name="..."android:hardwareAccelerated="true"/>
2、设置 WebChromeClient
我们添加一个内部类,实现 WebChromeClient, 并复写其中的方法
private class MyWebChromeClient extends WebChromeClient {// 全屏的时候调用@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {super.onShowCustomView(view, callback);}// 切换为竖屏的时候调用@Overridepublic void onHideCustomView() {super.onHideCustomView();}}
写到这里全屏按钮就已经显示出来了。当然,我们我们还要设置一下WebView 的相关属性
/*** 设置webView 相关属性* */private void initWebView() {webview = (WebView) findViewById(R.id.webview);webview.getSettings().setJavaScriptEnabled(true);// 设置支持javascript脚本webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);//设置webview缓存模式webview.setVerticalScrollBarEnabled(false); // 取消Vertical ScrollBar显示webview.setHorizontalScrollBarEnabled(false); // 取消Horizontal ScrollBar显示//设置自适应屏幕,两者合用webview.getSettings().setUseWideViewPort(true);webview.getSettings().setLoadWithOverviewMode(true);webview.getSettings().setAllowFileAccess(true);// 允许访问文件webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}webview.setFocusable(false); // 去掉超链接的外边框webview.getSettings().setDefaultTextEncodingName("GBK");//设置文本编码(根据页面要求设置: utf-8)webview.setWebChromeClient(new MyWebChromeClient());}
然后看一下效果:
问题2:设置全屏后,视频不能播放
全屏按钮出来后,点击全屏,会调用 onShowCustomView() 方法。我们在这个方法中设置横屏的方法,即可实现全屏
//设置横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
但是我设置后,发现无法播放视频,只显示一个黑页面
查了下相关资料后,发现
public void onShowCustomView(View view, CustomViewCallback callback)
这个方法,在设置全屏后 会在参数 view 上显示播放的视频。所以,当设置全屏后,需要让这个view显示到最前方。
解决:我们可以在布局文件中,添加一个和webview 同级的 Framlaoyout ,用来存放这个视图
xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayoutandroid:id="@+id/fl_video"android:layout_width="match_parent"android:layout_height="match_parent"android:visibility="gone" /><WebViewandroid:id="@+id/webview"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout >
WebChromeClient 具体实现
public class HelpActivity extends TitleBarActivity {private WebView webview = null;// h5 地址private String reurl = "";// 用来显示视频的布局private FrameLayout mLayout; public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.webview);mLayout = (FrameLayout) findViewById(R.id.fl_video);webview = (WebView) findViewById(R.id.webview);inieWebView();}/*** 设置webView 相关属性*/private void initWebView() {WebSettings setting= webview.getSettings();setting.setJavaScriptEnabled(true);// 设置支持javascript脚本setting.setCacheMode(WebSettings.LOAD_NO_CACHE);//设置缓存模式webview.setVerticalScrollBarEnabled(false); // 取消Vertical ScrollBar显示webview.setHorizontalScrollBarEnabled(false); // 取消Horizontal ScrollBar显示//设置自适应屏幕,两者合用setting.setUseWideViewPort(true);setting.setLoadWithOverviewMode(true);setting.setAllowFileAccess(true);// 允许访问文件setting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}webview.setFocusable(false); // 去掉超链接的外边框setting.setDefaultTextEncodingName("GBK");//设置文本编码(根据页面要求设置)webview.setWebChromeClient(new MyWebChromeClient());}private class MyWebChromeClient extends WebChromeClient {private CustomViewCallback mCustomViewCallback;// 横屏时,显示视频的viewprivate View mCustomView;// 点击全屏按钮时,调用的方法@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {super.onShowCustomView(view, callback);//如果view 已经存在,则隐藏if (mCustomView != null) {callback.onCustomViewHidden();return;}mCustomView = view;mCustomView.setVisibility(View.VISIBLE);mCustomViewCallback = callback;mLayout.addView(mCustomView);mLayout.setVisibility(View.VISIBLE);mLayout.bringToFront();//设置横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}// 取消全屏调用的方法@Overridepublic void onHideCustomView() {super.onHideCustomView();if (mCustomView == null) {return;}mCustomView.setVisibility(View.GONE);mLayout.removeView(mCustomView);mCustomView = null;mLayout.setVisibility(View.GONE);try {mCustomViewCallback.onCustomViewHidden();} catch (Exception e) {}titleView.setVisibility(View.VISIBLE);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏}}/*** 横竖屏切换监听*/@Overridepublic void onConfigurationChanged(Configuration config) {super.onConfigurationChanged(config);switch (config.orientation) {case Configuration.ORIENTATION_LANDSCAPE:getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);break;case Configuration.ORIENTATION_PORTRAIT:getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);break;}}@Overrideprotected void onDestroy() {super.onDestroy();webview.destroy();webview = null;}}
还需要在 AndroidMainfest.xml 中设置该 Activity相关属性,即横竖屏切换的时候,不进行生命周期的切换
<activityandroid:name=".HelpActivity"android:configChanges="orientation|keyboardHidden|navigation|screenSize"android:hardwareAccelerated="true"android:screenOrientation="portrait"/>
到这里就大功告成!
还有一点需要注意: 当我们播放视频后,如果直接退出,会发现后台仍然在播放。
我们可以在 onDestory 方法中,对webView进行销毁
WebView 视频播放,全屏按钮显示不出来,全屏后不能播放视频相关推荐
- Android 小知识记录-----息屏后亮屏并显示Activity在锁屏页面之上
息屏后亮屏并显示Activity在锁屏页面之上 1. 加权限 <uses-permission android:name="android.permission.WAKE_LOCK&q ...
- 设置锁屏方式后,锁屏长按电源键还有锁屏按钮(lockdown)锁屏状态下应该没有,解锁使用后长按才有这个按钮。
长按电源的菜单列表在frameworks/base/core/res/res/values/config.xml 里面有个<string-array translatable="fal ...
- android获取状态栏截屏按钮状态,关于代码截屏带状态栏的问题
昨天产品经理告诉我,希望能实现仿网易严选那样,可以捕捉到用户的截屏操作,然后进行截屏分享的小功能. 在实现的过程中遇到的最大问题就是截屏为什么没有状态栏???然后各种查找,资料聊聊无几,只有大神Ope ...
- 计算机开机后黑屏鼠标显示桌面图标,电脑开机后黑屏怎么解决只显示鼠标
品牌型号:联想GeekPro 2020 系统:win10 1909 64位企业版 部分用户可能电脑型号不一样,但系统版本一致都适合该方法. 电脑开机后黑屏怎么解决只显示鼠标?下面就与大家分享电脑开机后 ...
- 计算机开机后黑屏鼠标显示桌面图标,电脑开机后黑屏只有一个鼠标箭头怎么办 电脑黑屏的解决方法...
启动电脑后开机黑屏,只显示一个鼠标箭头怎么解决?有很多的网友都经历过这种情况,解决方法很简单,大家可以看看下面的解决方法,帮你解决黑屏烦恼. 电脑开机后黑屏只有鼠标箭头的解决方法 使用电脑的过程中往往 ...
- 索尼投屏无法显示服务器,索尼投屏显示无法播放视频
索尼投屏显示无法播放视频导读 索尼投屏显示无法播放视频 - 解决方法:以索尼X8500G为例,无法播放视频,可能是手机和电视没有处于同一wifi网络下,需要切换为同一网络:可能是网络连接不稳定导致,需 ...
- 开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
转自:http://blog.sina.com.cn/hyiyun 近些天,有网友的电脑出现:开机后屏幕一片漆黑,但屏幕中央显示有鼠标指针,并且可移动.按键盘上的不论什么键都没有反应,鼠标也仅可移动, ...
- 开机黑屏 只显示鼠标 电脑黑屏 只有鼠标 移动 [已成功解决]
转自:http://blog.sina.com.cn/hyiyun 近些天,有网友的电脑出现:开机后屏幕一片漆黑,但屏幕中央显示有鼠标指针,而且可移动.按键盘上的任何键都没有反应,鼠标也仅可移动,单. ...
- 华为全网通怎么显示无服务器,全网通游戏服务器
全网通游戏服务器 内容精选 换一换 如果网站直接无法访问,可能是由于安全组没有放行网站或者远程连接工具使用的端口.本节操作以80端口为例介绍排查云服务器端口不通问题的操作步骤.如果实例无法对外提供HT ...
最新文章
- 使用ssh连接到centos7中docker容器
- 符号链接和硬链接有什么区别?
- C语言中链表的英文名字,数据结构C语言版 循环链表表示和实现(国外英文).doc
- 暗通道优先的图像去雾算法(下)
- 中原银行张本晨:中原银行数字化营销体系建设实践
- 安装仅限于用于sharepoint_酒泉汗蒸房设计施工厂家,家庭汗蒸房安装厂家
- 【OpenCV 例程200篇】74. 图像的抗混叠
- 【Flink】Flink Not all required tasks are currently running
- PHP 面试时常考的文件操作函数
- 设置UITableView Section的背景颜色和字体颜色
- javascript配置ckfinder的路径
- 解决Ubuntu ssh 登录慢问题
- HTML Report报告无法正常展示的解决办法
- IJCAI 2021 投稿安排出来了!新审稿机制体验一下?
- 索尼Z2(L50t)刷CM12教程
- 小公司老板的日常管理
- 【计算机网络】PPP和PPPoE协议
- 正确的选择大于努力_选择正确技术的11个注意事项
- CSS3的2D、3D变换、过度与动画效果
- 经济基础知识(初级)【5】
热门文章
- 红楼梦人物出场统计python_红楼梦有多少人物统计(一)
- 想考阿里云acp证书,报哪个机构好?
- 联想笔记本声音太小怎么办_联想笔记本电脑没声音了怎么办(大学生如何选择笔记本电脑)...
- 人工智能与深度神经网络,人工智能深度神经网络
- STM32F407系统标准库函数之时钟配置 和 位带操作
- PA,MIOU,FWIOU
- 半波对称振子方向图_对称振子阵列天线.ppt
- Linux桌面系统x11原理简介
- 计算机网恢,电脑附身
- 东软、天健、金仕达、杭创、中联..HIS比较