情景
项目中有一大板块是加载web页面,开始集成了腾讯的X5内核WebView(因为本身集成了视频播放功能,使用起来比较方便)。但是后来前端大神写了一个web页面用到了<canvas>标签,使用X5加载不出来该标签的内容,因为我们设置了webView关闭了硬件加速( webview.setLayerType(View.LAYER_TYPE_SOFTWARE,null)),今日仔细查看了X5的官方文档才知道:X5是不建议使用以下两个api的:
经过考虑,我们决定使用Android原生的WebView,然后自己处理播放网络视频时的问题,简单记录过程中遇到的问题。
问题一:视频黑屏
我遇到的视频黑屏是:视频播放时只有声音无画面的情况,原因就是前面我说的我在初始化的时候讲webview的硬件加速关闭了,后来查资料说webView播放视频必须开启硬件加速:
在AndroidManifest.xml文件中的application或者webView所在的activity标签中开启硬件加速:
然后在代码中:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager
.LayoutParams.FLAG_HARDWARE_ACCELERATED);
即可解决黑屏问题。
问题二:全屏问题
一般前端页面视频标签使用的是video标签,点击全屏按钮时,会回调webView的WebChromClient的onShowCustomView方法,点击退出全屏时会回调webView的WebChromClient的onHideCustomView方法。所以实现全屏的逻辑我们就重写这两个方法即可:
为了在其它地方使用webView方便,我就把WebView封装了一下,首先看CustomWebView的布局文件:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"/>
<!--作为视频全屏播放时的容器-->
<FrameLayout
android:id="@+id/frame_full_screen