如何在 Android 的原生视图之上覆盖 PhoneGap 的 CordovaWebView?

Posted

技术标签:

【中文标题】如何在 Android 的原生视图之上覆盖 PhoneGap 的 CordovaWebView?【英文标题】:How can I overlay a PhoneGap's CordovaWebView on top of a native view in Android? 【发布时间】:2016-03-30 20:37:07 【问题描述】:

我正在编写一个带有定制插件的 Phonegap 应用程序。这个插件在它自己的 SurfaceView 上生成一个全屏动画背景(本质上是一个视频)(把它想象成一个背景视频)。我希望常规 phonegap webview 位于此插件之上,作为透明覆盖。我该怎么做?

我当前的代码:

public void initialize(CordovaInterface cordova, CordovaWebView webView) 
    final FrameLayout layout = (FrameLayout) webView.getView().getParent();
    final Activity activity = cordova.getActivity();

    activity.runOnUiThread(new Runnable() 
        @Override
        public void run() 
            try 
                // here I insert the surface
                // that I want to be placed behind the webview
                activity.setContentView(R.layout.preview);

                MySurfaceView myView = new MySurfaceView(activity);
                FrameLayout preview = (FrameLayout) activity.findViewById(R.id.myview);
                preview.addView(myView);
            
            catch(Exception e) 
                Log.e(CamCapture.TAG, "failed: " + e.getMessage());
            

        
    );

这个问题与How can I overlay a native view on top of PhoneGap's CordovaWebView in android?相反

【问题讨论】:

请注意,当前版本的 CrossWalk 存在透明度问题。这是我的问题的一部分。 【参考方案1】:

您可以通过在相对布局中将 Web 视图置于 Native 视图之上并在您的 Web 视图上设置以下属性来做到这一点

wv.setWebViewClient(new WebViewClient() 
            @Override
            public void onPageFinished(WebView view, String url) 
                super.onPageFinished(view, url);
                view.setBackgroundColor(ContextCompat.getColor(context, R.color.transparent));
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
                    view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
                 else 
                    view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
                
            
        );
        wv.setBackgroundResource(android.R.color.transparent);

它会让你的 webview 的背景透明,你可以看到你的原生视图。

【讨论】:

这可以通过常规的 Cordova 应用程序来完成,在相对布局中移动(或定位)webview(在 xml 上,如何)?还是我需要设置一个原生应用程序并在顶部创建 webview?

以上是关于如何在 Android 的原生视图之上覆盖 PhoneGap 的 CordovaWebView?的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序开发第九天之视图容器

微信小程序开发第九天之视图容器

小程序--组件--视图容器

Android 在一切之上叠加一个视图?

Android - 如何通过代码将图像放置在现有布局之上?

在所有其他 Android 应用之上显示应用视图