一、官方介绍

HTML5 video support
HTML5 Video support 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. 打开硬件加速(3.0以上版本支持)
  2. set一个WebChromClient,实现onShowCustomView() 方法和onHideCustomView()方法
  3. 全屏支持

二、实现解决

  1. 打开硬件加速
  • 在Manifest中,对应的Activity添加: android:hardwareAccelerated = “true”。
  • 防止h5重新加载:Manifest中,对应的Activity添加: android:configChanges=“keyboardHidden|orientation|screenSize”
  • 切换横屏时,屏幕的H5内容始终以竖屏显示:Manifest中,对应的Activity添加: android:screenOrientation=“portrait”
<activity
    android:name=".uicomponent.WebViewActivity"
    android:configChanges="orientation|screenSize|keyboardHidden" //防止h5重新加载
    android:hardwareAccelerated="true" //硬件加速
    android:screenOrientation="portrait" //当我们切换横竖屏的时候,屏幕的内容始终以竖屏显示,而不会根据屏幕的方向来显示内容
    android:theme="@style/AppTheme.NoActionBar" />
  1. WebView中设置WebChromClient实现接口onShowCustomView() 方法和onHideCustomView()方法, 实现后即显示全屏播放按钮,但是点击无反应,需要实现全屏支持。

  2. 全屏支持实现:WebView在点击全屏按钮后调用onShowCustomView方法,而全屏的视频会在其参数view中进行渲染。我们需要在Activity中写一个viewRoot,在onShowCustomView触发后,将其view传入viewRoot,且使APP横屏,达到全屏显示。

@SuppressLint("StaticFieldLeak")
private var mCustomView: View? = null //全屏渲染视频的View
private var webRoot: FrameLayout? = null// 显示全屏视频的布局
private var mCustomViewCallback: CustomViewCallback? = null
@SuppressLint("SourceLockedOrientationActivity")
override fun onShowCustomView(view: View?, callback: CustomViewCallback?) {
    super.onShowCustomView(view, callback)
    try {
        if (mCustomView != null) { //当上一个view存在时,隐藏全屏
            callback?.onCustomViewHidden()
            return
        mCustomView = view
        webRoot?.addView(mCustomView)
        mCustomViewCallback = callback
        webView?.visibility = View.GONE
        val actionBar = supportActionBar
        actionBar?.hide()
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
    } catch (e: Exception) {
        e.printStackTrace()
@SuppressLint("SourceLockedOrientationActivity")
override fun onHideCustomView() {
    try {
        webView?.visibility = View.VISIBLE
        val actionBar = supportActionBar
        actionBar?.show()
        if (mCustomView == null) { //当上一个view不存在时,不处理
            return
        mCustomView?.visibility = View.GONE
        webRoot?.removeView(mCustomView)
        mCustomViewCallback?.onCustomViewHidden()
        mCustomView = null
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    } catch (e: Exception) {
        e.printStackTrace()
    super.onHideCustomView()
override fun onProgressChanged(view: WebView?, newProgress: Int) {
    super.onProgressChanged(view, newProgress)
    progressBar?.progress = newProgress
<FrameLayout
    android:id="@+id/web_root"
    app:layout_constraintBottom_toTopOf="@id/v_bottom"
    app:layout_constraintTop_toBottomOf="@id/v_top"
    android:layout_width="match_parent"
    android:layout_height="0dp">
   <WebView
         android:id="@+id/webview"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
    <ProgressBar
        android:id="@+id/progress_bar"
        style="?android:progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="1.5dp"
        android:max="100"
        android:progressDrawable="@drawable/webview_progress_bar_style" />
</FrameLayout>

三、写在最后

此文章为个人开发时记录,有时时间有限,无法深入研究,若看到此文章后有其他见解或解决方式,欢迎留言交流👇👇👇

————————————————
版权声明:转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/weixin_44158429/article/details/130217214

Android WebView H5视频播放实现全屏播放功能。问题全屏按钮不显示、灰显、点击无效解决方案。HTML5 Video Support。1. 打开硬件加速(3.0以上版本支持) ,防止h5重新加载,切换横屏时,屏幕的H5内容始终以竖屏显示。2. set一个WebChromClient,实现onShowCustomView() 方法和onHideCustomView()方法。3. 全屏支持。
之前公司要求的一个项目需要播放网络视频,给的是HTML的地址,所以只能用webView播放,但是,播放的时候点击自带的全屏按钮根本没反应,准确说是只有图标变化了,但是根本没有全屏。在网上找了好多资料,博客什么的,都不能解决!于是本人突发奇想,但我点击一个按钮或者一个图标的时候强制当前的Activity横屏充满,不就可以解决了么。于是,不幸的是,我成功了,哈哈! 接下来给大家详细步骤,播放什么代码
本文主要是将最近工作中遇到的一个问题进行总结分享,主要介绍的是如何让WebViewH5页面全屏播放视频。关于这个问题,做一下简单分析,希望对大家有所帮助,下面话不多说了,来看看详细的介绍吧。 其实很简单,就是配置问题。关键地方配好了,基本没什么问题了。 设置WebView 在清单需要配置的AndroidManifest.xml <application android:allowBackup=true android:icon=@mipmap/ic_launcher android:label=@string/app_name
Android中使用WebView加载H5页面的时候,如果H5页面里有视频播放器,那么在进行视频全屏切换的时候可能直接在H5页面上操作不管用,那么Android中就需要对WebView进行一些设置 FrameLayout mLayout; // 用来显示视频的布局 private View mCustomView; //用于全屏渲染视频的View private WebChromeClient.CustomViewCallback mCustomViewCallback; @SuppressL
Android WebView 视频播放全屏按钮显示灰显解决方案背景问题定位 在Android开发中,遇到了如下问题:Activity内嵌WebView,加载有视频的页面时,视频无法全屏播放全屏按钮显示或者灰显。 故记录一下此次问题解决过程。 问题定位 在Android官方文档上对问题所述场景有如下解释: 其大意为: 1. 要打开硬件加速 2. 设置 WebChromeCli...
<video controls="controls" webkit-playsinline="true" playsinline="true" src=""></video> webkit-playsinline="true" playsinline="true" IOS之UIWebView加上allowsInlineMediaPlayback属性为YESwebview.allowsInlineMediaPlayback=YES; Android WebView 优化、WebV离线包开发出现Crash: Fatal signal 5 , code 1, fault addr 0x6e1f33c798 in tid 32217 62370 Android studio 启动失败Missing essential plugins: com.android.tools.design org.jetbrains.android GitHub Copilot Chat