SurfaceView上的中心MoPub baner

时间:2011-07-10 12:20:15

标签: android layout surfaceview mopub

我想在Android游戏中添加MoPub广告。游戏是在SurfaceView Class上创建的。我没有xml布局文件。问题是我无法将广告置于屏幕上。我尝试中心和重力一切。仍然无法正常工作。 MoPubView扩展了FrameLayout。

    MoPubView mAdView = new MoPubView(this);
    mAdView.setAdUnitId("_MY__ID_"); 
    mAdView.loadAd();

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

    RelativeLayout mRelativeLayout = new RelativeLayout(this);

    mRelativeLayout.setGravity(Gravity.CENTER_HORIZONTAL);
    mRelativeLayout.addView(mSurface);
    mRelativeLayout.addView(mAdView, layoutParams);

    mRelativeLayout.invalidate();
    setContentView(mRelativeLayout);

请告诉我一些事情,因为它让我抓狂。我觉得我很遗憾。

4 个答案:

答案 0 :(得分:1)

您无法将内容直接置于MoPub中心,或者至少我没有找到办法。它基于FrameLayout。

您必须将广告置于HTML中心。如果您在MoPub广告系列中使用自定义HTML代码,只需将代码包装在<div style="text-align:center">...</div>中。 (通过MoPub管理网站执行此操作)。它解决了我的问题,我使用的是OpenX广告提供商。

答案 1 :(得分:1)

只需使用“FILL_PARENT”参数创建容器布局,然后将广告视图添加到其中,如下所示:

MoPubView mAdView = new MoPubView(this);
mAdView.setAdUnitId(XXXXXXX);

RelativeLayout adContainer = new RelativeLayout(this);
addContentView(adContainer, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

LayoutParams adParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 1); //to align vertically at top
adParams.addRule(RelativeLayout.CENTER_IN_PARENT, 1); //to align horizontally at center

adContainer.addView(mAdView, adParams);
mAdView.loadAd();

答案 2 :(得分:0)

我知道设置恒定的横幅宽度并不是一个好主意,但只要你的横幅是320px它就可以正常工作:

final float scale = getResources().getDisplayMetrics().density;

MoPubView mAdView = new MoPubView(this);
mAdView.setAdUnitId(MOPUB_ID); 
mAdView.loadAd();

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams((int) (320*scale), LayoutParams.WRAP_CONTENT);

layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

RelativeLayout mRelativeLayout = new RelativeLayout(this);

mRelativeLayout.addView(mSurface);
mRelativeLayout.addView(mAdView, layoutParams);

mRelativeLayout.invalidate();
setContentView(mRelativeLayout);

答案 3 :(得分:0)

我用下面的代码片段做了同样的事情。我正在使用LibGDX Java游戏引擎。

Relativelayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                                RelativeLayout.LayoutParams.WRAP_CONTENT);
                adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

                moPubView = new MoPubView(mActivity.getApplicationContext());
                moPubView.setAdUnitId("XXXXXX");// Banner test Ad unit Id.
                moPubView.setAutorefreshEnabled(true);
                moPubView.setVisibility(View.GONE);
                layout.addView(moPubView,adParams);

1。我在父级中有相对布局。

2。在仅具有layoutParams的父相对布局中添加了MoPubView ALIGN_PARENT_BOTTOM && CENTER_HORIZONTAL

layout.addView(moPubView,adParams);