【随手记】android webview里面video显示全屏功能

242 阅读1分钟
主要是在WebChromeClient重写两个方法
private var customView: View? = nullprivate var fullscreenHolder: FrameLayout? = nullprivate var videoView: VideoView? = nullprivate var contentFrame: FrameLayout? = null


onShowCustomView{
if (view == null) returnif (customView != null && callback != null) {    callback.onCustomViewHidden()    return}customView = viewfullscreenHolder = FrameLayout(this)fullscreenHolder?.addView(    customView,    FrameLayout.LayoutParams(        FrameLayout.LayoutParams.MATCH_PARENT,        FrameLayout.LayoutParams.MATCH_PARENT    ))val decorView = window.decorView as FrameLayoutdecorView.addView(    fullscreenHolder,    FrameLayout.LayoutParams(        FrameLayout.LayoutParams.MATCH_PARENT,        FrameLayout.LayoutParams.MATCH_PARENT    ))customView?.setKeepScreenOn(true)setCustomFullscreen(true)
}



onHideCustomView{
val decorView = window.decorView as FrameLayoutdecorView.removeView(fullscreenHolder)customView!!.keepScreenOn = falsesetCustomFullscreen(false)fullscreenHolder = nullcustomView = nullif (videoView != null) {    videoView!!.setOnErrorListener(null)    videoView!!.setOnCompletionListener(null)    videoView = null}contentFrame?.requestFocus()
}

private fun setCustomFullscreen(fullscreen: Boolean) {    if (fullscreen) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {            val insetsController = window.insetsController            if (insetsController != null) {                insetsController.hide(WindowInsets.Type.statusBars())                insetsController.systemBarsBehavior =                    WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE            }        } else window.setFlags(            WindowManager.LayoutParams.FLAG_FULLSCREEN,            WindowManager.LayoutParams.FLAG_FULLSCREEN        )    } else {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {            val insetsController = window.insetsController            if (insetsController != null) {                insetsController.show(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())                insetsController.systemBarsBehavior =                    WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE            }        } else window.setFlags(            WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,            WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN        )    }}