1

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

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

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

它与这个问题非常相似,不同之处在于我使用的是纯 java 代码而不是 XML 布局文件。

AdMob 调解 Millenial Media 广告在刷新时占据整个屏幕

看截图:

横幅意外白屏

这是代码:

                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);
                }
4

2 回答 2

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);

横幅视图无法返回正确的宽度和高度,必须根据 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);

现在可以了,看截图。

在此处输入图像描述

于 2014-11-13T09:32:43.500 回答
0

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

于 2014-10-09T03:07:11.370 回答