我正在开展我的业余项目,在网络视图中显示嵌入的推文。一些推文包含视频。在 iOS 上,当我单击蓝色播放按钮时,它会在全屏视频播放器中启动视频。与 Android 上一样,它在推文的嵌入式媒体播放器中运行。
我正在使用自定义 Chrome 客户端来处理全屏视图
class CustomChromeClient(val activity: ComponentActivity) : WebChromeClient() {
var customView: View? = null
override fun onHideCustomView() {
(activity.window.decorView as FrameLayout).removeView(this.customView)
this.customView = null
}
override fun onShowCustomView(paramView: View, paramCustomViewCallback: CustomViewCallback) {
if (this.customView != null) {
onHideCustomView()
return
}
this.customView = paramView
(activity.window.decorView as FrameLayout).addView(this.customView, FrameLayout.LayoutParams(-1, -1))
}
}
但是只有当我必须在推文的媒体播放器中手动点击全屏模式时,才会出现这种全屏。我真正想做的是当我播放视频时,它应该以全屏视图开始。
也许你可以用 addJavascriptInterface 建立一个到 JS 端的桥梁?
class WebAppInterface(private val activity: Activity) {
@JavascriptInterface
fun onVideoPlay() {
// Trigger full-screen mode here
}
}
// In your activity or fragment where WebView is set up
webView.addJavascriptInterface(WebAppInterface(this), "AndroidInterface")
val jsCode = """
(function() {
var videos = document.querySelectorAll('video');
videos.forEach(function(video) {
video.addEventListener('play', function() {
AndroidInterface.onVideoPlay();
});
});
})();
"""
webView.loadUrl("javascript:$jsCode")
class CustomChromeClient(val activity: ComponentActivity) : WebChromeClient() {
// existing code...
fun triggerFullScreen() {
// Implement logic to trigger full-screen mode
// This might involve mimicking what onShowCustomView does
}
}