【问题标题】:Android WebView display only black screen with fullscreen video contained in an iframeAndroid WebView 仅显示黑屏,iframe 中包含全屏视频
【发布时间】:2019-03-06 07:54:15
【问题描述】:

问题

我正在 React Native 应用程序中运行自定义版本的 Cordova WebView。在网站中,有一个嵌入视频,例如来自 YouTube、我的 CDN 等,它被包裹在一个 <iframe> 标记中。当我点击全屏时,屏幕变黑了,我只听到音频播放。

我的尝试

我已经尝试过很多关于 StackOverflow 的建议,例如:

  • android:hardwareAccelerated=true
  • 实现了自定义onShowCustomViewonHideCustomView
    @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;
    }

问题

问题没有解决,似乎没有任何改变。以下调试器上的堆栈跟踪表明: - 参数View v 的(唯一)子项未聚焦 - video view的class是FullScreenView,属于Android chromium。

解决此问题的建议解决方案是什么?谢谢。

【问题讨论】:

    标签: android html iframe


    【解决方案1】:

    解决方案在此处正确发布: Webview and iFrame Video full screen issue

    基本上,问题在于 VideoView 不应位于 WebView 的相同层次结构或子视图层次结构中。在 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);
    

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多