最近项目的一个需求,需要在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 视频播放,全屏按钮显示不出来,全屏后不能播放视频相关推荐

  1. Android 小知识记录-----息屏后亮屏并显示Activity在锁屏页面之上

    息屏后亮屏并显示Activity在锁屏页面之上 1. 加权限 <uses-permission android:name="android.permission.WAKE_LOCK&q ...

  2. 设置锁屏方式后,锁屏长按电源键还有锁屏按钮(lockdown)锁屏状态下应该没有,解锁使用后长按才有这个按钮。

    长按电源的菜单列表在frameworks/base/core/res/res/values/config.xml 里面有个<string-array translatable="fal ...

  3. android获取状态栏截屏按钮状态,关于代码截屏带状态栏的问题

    昨天产品经理告诉我,希望能实现仿网易严选那样,可以捕捉到用户的截屏操作,然后进行截屏分享的小功能. 在实现的过程中遇到的最大问题就是截屏为什么没有状态栏???然后各种查找,资料聊聊无几,只有大神Ope ...

  4. 计算机开机后黑屏鼠标显示桌面图标,电脑开机后黑屏怎么解决只显示鼠标

    品牌型号:联想GeekPro 2020 系统:win10 1909 64位企业版 部分用户可能电脑型号不一样,但系统版本一致都适合该方法. 电脑开机后黑屏怎么解决只显示鼠标?下面就与大家分享电脑开机后 ...

  5. 计算机开机后黑屏鼠标显示桌面图标,电脑开机后黑屏只有一个鼠标箭头怎么办 电脑黑屏的解决方法...

    启动电脑后开机黑屏,只显示一个鼠标箭头怎么解决?有很多的网友都经历过这种情况,解决方法很简单,大家可以看看下面的解决方法,帮你解决黑屏烦恼. 电脑开机后黑屏只有鼠标箭头的解决方法 使用电脑的过程中往往 ...

  6. 索尼投屏无法显示服务器,索尼投屏显示无法播放视频

    索尼投屏显示无法播放视频导读 索尼投屏显示无法播放视频 - 解决方法:以索尼X8500G为例,无法播放视频,可能是手机和电视没有处于同一wifi网络下,需要切换为同一网络:可能是网络连接不稳定导致,需 ...

  7. 开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]

    转自:http://blog.sina.com.cn/hyiyun 近些天,有网友的电脑出现:开机后屏幕一片漆黑,但屏幕中央显示有鼠标指针,并且可移动.按键盘上的不论什么键都没有反应,鼠标也仅可移动, ...

  8. 开机黑屏 只显示鼠标 电脑黑屏 只有鼠标 移动 [已成功解决]

    转自:http://blog.sina.com.cn/hyiyun 近些天,有网友的电脑出现:开机后屏幕一片漆黑,但屏幕中央显示有鼠标指针,而且可移动.按键盘上的任何键都没有反应,鼠标也仅可移动,单. ...

  9. 华为全网通怎么显示无服务器,全网通游戏服务器

    全网通游戏服务器 内容精选 换一换 如果网站直接无法访问,可能是由于安全组没有放行网站或者远程连接工具使用的端口.本节操作以80端口为例介绍排查云服务器端口不通问题的操作步骤.如果实例无法对外提供HT ...

最新文章

  1. 使用ssh连接到centos7中docker容器
  2. 符号链接和硬链接有什么区别?
  3. C语言中链表的英文名字,数据结构C语言版 循环链表表示和实现(国外英文).doc
  4. 暗通道优先的图像去雾算法(下)
  5. 中原银行张本晨:中原银行数字化营销体系建设实践
  6. 安装仅限于用于sharepoint_酒泉汗蒸房设计施工厂家,家庭汗蒸房安装厂家
  7. 【OpenCV 例程200篇】74. 图像的抗混叠
  8. 【Flink】Flink Not all required tasks are currently running
  9. PHP 面试时常考的文件操作函数
  10. 设置UITableView Section的背景颜色和字体颜色
  11. javascript配置ckfinder的路径
  12. 解决Ubuntu ssh 登录慢问题
  13. HTML Report报告无法正常展示的解决办法
  14. IJCAI 2021 投稿安排出来了!新审稿机制体验一下?
  15. 索尼Z2(L50t)刷CM12教程
  16. 小公司老板的日常管理
  17. 【计算机网络】PPP和PPPoE协议
  18. 正确的选择大于努力_选择正确技术的11个注意事项
  19. CSS3的2D、3D变换、过度与动画效果
  20. 经济基础知识(初级)【5】

热门文章

  1. 红楼梦人物出场统计python_红楼梦有多少人物统计(一)
  2. 想考阿里云acp证书,报哪个机构好?
  3. 联想笔记本声音太小怎么办_联想笔记本电脑没声音了怎么办(大学生如何选择笔记本电脑)...
  4. 人工智能与深度神经网络,人工智能深度神经网络
  5. STM32F407系统标准库函数之时钟配置 和 位带操作
  6. PA,MIOU,FWIOU
  7. 半波对称振子方向图_对称振子阵列天线.ppt
  8. Linux桌面系统x11原理简介
  9. 计算机网恢,电脑附身
  10. 东软、天健、金仕达、杭创、中联..HIS比较