主要是在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 ) }}