【问题标题】:Millenial Media banner Ad display a white entire screen千禧年媒体横幅广告显示一个白色的整个屏幕
【发布时间】:2014-10-07 05:30:09
【问题描述】:

我正在使用 Millennial Media SDK 并为 mMedia Ad 编写一个 Cordova/PhoneGap 插件,它在 iOS 和视频广告上运行良好,但在 Android 上使用横幅广告时遇到了一些问题。

如果我将 MMAdView 作为 Cordova WebView 的兄弟视图插入(停靠在顶部或底部),则横幅广告始终显示全屏空白区域,覆盖 WebView。

当我使用getWidth()getMeasuredWidth() 编写日志来检查MMAdView 的大小时,它总是返回0 或1 而不是实际大小!

和这个问题很相似,不同的是我使用的是纯java代码而不是XML布局文件。

AdMob mediated Millenial Media ad taking entire screen on refresh

看截图:

代码如下:

                adView = new MMAdView(cordova.getActivity());
                adView.setApid( bannerAdId );
                adView.setId(MMSDK.getDefaultAdId());

                width = BANNER_AD_WIDTH;
                height = BANNER_AD_HEIGHT;
                //Finds an ad that best fits a users device.
                if(canFit(MED_BANNER_WIDTH)) {
                    width = MED_BANNER_WIDTH;
                    height = MED_BANNER_HEIGHT;
                } else if(canFit(IAB_LEADERBOARD_WIDTH)) {
                    width = IAB_LEADERBOARD_WIDTH;
                    height = IAB_LEADERBOARD_HEIGHT;
                }
                adView.setWidth(width);
                adView.setHeight(height);

                adView.setListener(new BannerListener());
                adView.getAd();

                ViewGroup parentView = (ViewGroup) webView.getParent();
                if(argPos <= TOP_RIGHT) {
                    parentView.addView(adView, 0);
                } else {
                    parentView.addView(adView);
                }

【问题讨论】:

    标签: android cordova millennial-media


    【解决方案1】:

    经过研究,我自己找到了解决方案。

    首先,创建横幅视图并设置逻辑adWidth和adHeight:

    //Constants for tablet sized ads (728x90)
    private static final int IAB_LEADERBOARD_WIDTH = 728;
    private static final int IAB_LEADERBOARD_HEIGHT = 90;
    
    private static final int MED_BANNER_WIDTH = 480;
    private static final int MED_BANNER_HEIGHT = 60;
    
    //Constants for phone sized ads (320x50)
    private static final int BANNER_AD_WIDTH = 320;
    private static final int BANNER_AD_HEIGHT = 50;
    
        MMAdView ad = new MMAdView(getActivity());
        ad.setApid( adId );
        ad.setMMRequest(new MMRequest());
        ad.setId(MMSDK.getDefaultAdId());
        ad.setIgnoresDensityScaling(ignoreScaling);
        ad.setTransitionType(transitionType);
    
        //Finds an ad that best fits a users device.
        if(canFit(MED_BANNER_WIDTH)) {
            adWidth = MED_BANNER_WIDTH;
            adHeight = MED_BANNER_HEIGHT;
        } else if(canFit(IAB_LEADERBOARD_WIDTH)) {
            adWidth = IAB_LEADERBOARD_WIDTH;
            adHeight = IAB_LEADERBOARD_HEIGHT;
        }
        ad.setWidth(adWidth);
        ad.setHeight(adHeight);
    

    banner view 无法返回正确的宽度和高度,必须根据 adWidth 和 adHeight 计算。

        DisplayMetrics metrics = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
        float screenDensity = metrics.density;
    
        int adViewWidth = (int) (adWidth * screenDensity);
        int adViewHeight = (int) (adHeight * screenDensity);
    

    然后,使用计算出的 adViewWidth 和 adViewHeight 来设置横幅视图的位置。

        adViewLayout = new RelativeLayout(activity);
    
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.MATCH_PARENT);
        ViewGroup rootView = (ViewGroup) getView().getRootView();
        rootView.addView(adViewLayout, params);
        adViewLayout.bringToFront();
    
        Log.d(LOGTAG, String.format("show banner: (%d,%d), (%d x %d)", x,y,bw,bh));
    
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(bw, bh);
        params.leftMargin = x;
        params.topMargin = y;
        adViewLayout.addView(adView, params);
    

    现在可以了,看截图。

    【讨论】:

    • 我遇到了同样的问题。你能上传剩下的代码吗?我仍然无法让它工作。以及如何将横幅移至底部?
    • 创建一个相对布局或线性布局作为容器,将广告横幅视图放入其中。
    • 我设法做到了,我也将它移到了底部,但现在广告周围有空白区域。它不像你的那样透明。有什么想法吗?
    【解决方案2】:

    没有代码很难分辨。这可能是因为您使用 PhoneGap 来包装一些广告代码。它可能是不同类型的错误。由于您已经在使用 PhoneGap,您可能会发现 Millennial Media 的 Javascript SDK 更易于使用以满足您的广告需求。 http://docs.millennialmedia.com/mmadlib/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多