Android原生API提供了WebView來加載H5網(wǎng)頁,H5網(wǎng)頁中可能使用Video標(biāo)簽實(shí)現(xiàn)視頻播放,正常播放比較好實(shí)現(xiàn)利赋,但是一般來說視頻都會(huì)要求全屏播放,這怎么弄呢猩系?下面就來實(shí)現(xiàn)一下媚送。
整體思路:
點(diǎn)擊Video標(biāo)簽全屏播放按鈕時(shí),會(huì)回調(diào)WebChromeClient的onShowCustomView()方法寇甸,退出全屏?xí)r會(huì)回調(diào)onHideCustomView()方法塘偎,所以思路就來了,onShowCustomView()中將手機(jī)屏幕設(shè)置為橫屏拿霉,將WebView以及其他控件隱藏并將視頻控件占滿整個(gè)屏幕即可吟秩;onHideCustomView()中將手機(jī)屏幕設(shè)置為豎屏,將視頻控件隱藏友浸,再次重新顯示W(wǎng)ebView
關(guān)鍵代碼實(shí)現(xiàn):
/**
* 實(shí)現(xiàn)Video標(biāo)簽全屏播放
*/
lateinit var mCustomView: View
lateinit var mParent: ViewGroup
override fun onShowCustomView(view: View, callback: WebChromeClient.CustomViewCallback?) {
setScreen()
var parent: ViewGroup = mWebActWebContainer.parent as ViewGroup
parent.removeView(mWebActWebContainer)
parent.addView(view)
mCustomView = view
mParent = parent;
}
override fun onHideCustomView() {
setScreen()
mParent.removeView(mCustomView)
mParent.addView(mWebActWebContainer)
}
private fun setScreen() {
if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
} else {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
when (newConfig.orientation) {
Configuration.ORIENTATION_LANDSCAPE -> {
window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
Configuration.ORIENTATION_PORTRAIT -> {
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}
}
}
代碼邏輯比較簡(jiǎn)單峰尝,按照上述思路一步步走就ok了,需要注意的是WebView中播放視頻一般要開啟硬件加速!
這是我的實(shí)現(xiàn)截圖:
讀者有不明白之處請(qǐng)留言交流收恢,覺得湊活就給點(diǎn)個(gè)贊吧武学!