问题
我在 React Native 应用程序中运行自定义版本的 Cordova WebView。在网站中,有一个嵌入的视频,例如来自 YouTube、我的 CDN 等,它被包裹在 <iframe>
中。标签。当我点击全屏时,屏幕变黑了,我只能听到音频播放。
我的尝试
我已尝试通过 StackOverflow 上的许多建议进行修复,例如:
-
android:hardwareAccelerated=true
- 实现定制
onShowCustomView
和onHideCustomView
:
@Override
public void onShowCustomView(View v, WebChromeClient.CustomViewCallback cb) {
if (mVideoView != null) {
cb.onCustomViewHidden();
} else {
FrameLayout f = (FrameLayout) v;
mVideoView = v;
mWebView.setVisibility(View.GONE);
f.getChildAt(0).setFocusable(true);
mCustomView = new FrameLayout(mWebView.getContext());
mCustomView.setVisibility(View.VISIBLE);
mCustomView.addView(mVideoView);
getWebViewParent().addView(mCustomView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
mVideoCallback = cb;
}
}
@Override
public void onHideCustomView() {
super.onHideCustomView();
if (mVideoView == null) {
return;
}
mWebView.setVisibility(View.VISIBLE);
mCustomView.setVisibility(View.GONE);
mVideoView.setVisibility(View.GONE);
mCustomView.removeView(mVideoView);
getWebViewParent().removeView(mCustomView);
mVideoCallback.onCustomViewHidden();
mVideoView = null;
}
问题
问题没有解决,似乎没有任何改变。调试器上的以下堆栈跟踪显示:
- 参数的(唯一的) child View v
没有专注
- 视频 View 的类是 FullScreenView
, 属于 Android chromium。
解决此问题的建议解决方案是什么?谢谢。
最佳答案
解决方案已正确发布在这里: Webview and iFrame Video full screen issue
基本上,问题在于 VideoView 不应位于 WebView 的同一层次结构或 subview 层次结构中。在 Java 中快速实现 onShowCustomView
如下所示:
mVideoView.setLayout(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
mVideoView.setVisibility(View.VISIBLE);
webViewRoot.addView(mVideoView);
webViewDirectParent.setVisibility(View.GONE);
关于Android WebView 仅显示黑屏,iframe 中包含全屏视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953762/