Android AdMob:addView在返回活动之前不会显示广告

时间:2014-02-21 12:58:37

标签: overlay admob relativelayout surfaceview banner

我正在尝试在游戏顶部添加横幅广告。我的活动使用RelativeLayout和自定义SurfaceView。我希望广告与SurfaceView重叠。

广告加载并且可以点击,但不会被绘制到屏幕上。当我离开活动并返回时,广告被绘制(例如,通过按主页按钮然后通过最近菜单返回到应用程序)。

这不是等待广告加载的问题,因为1)如果我等待,则广告不会显示; 2)即使广告不可见,广告也是可点击的。

这是我的布局代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/layout_mainmenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<com.xxx.menu.SurfaceViewMainMenu
  android:id="@+id/view_mainmenu"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>


     <com.google.android.gms.ads.AdView
    android:id="@+id/ad"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/view_mainmenu"
    android:layout_alignLeft="@id/view_mainmenu"
    ads:adSize="BANNER"
    ads:adUnitId="@string/ad_unit_id_banner"/>

首次运行RenderThread时,RenderThread将加载广告的代码作为Runnable发布到UI线程。

有没有人有任何想法我可以立即制作广告?或者为什么只有在我返回活动时才会制作广告?

我尝试在RelativeLayout上调用forceLayout()/ requestLayout(),但这没有帮助。我也尝试在视图上调用invalidate()。

谢谢, 汤姆。


修改

我在AdView中添加了一个AdListener,可以确认是否正在调用onAdLoaded。广告已加载但不可见。

什么有效:我在onAdLoaded回调中再次发出adLoad请求,然后广告出现。

因此广告只会在我发出第二个请求后显示。有谁知道这里发生了什么?

3 个答案:

答案 0 :(得分:10)

我遇到了同样的问题,我所要做的就是在加载时将adView带到前面。 (我推荐这个加载两次)

mAdView.setAdListener(new AdListener()
{
    public void onAdLoaded()
    {
        Log.i("Ads", "onAdLoaded");
        mAdView.bringToFront();
    }
}

答案 1 :(得分:3)

我遇到了同样的问题,并将AdView的可见性设置为GONE,然后返回onAdLoaded似乎为我解决了这个问题:

adView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        int visibility = adView.getVisibility();
        adView.setVisibility(AdView.GONE);
        adView.setVisibility(visibility);
    }
});

比制作重复的广告请求更少浪费,而且您不必牺牲原始的z订单。

答案 2 :(得分:0)

您告诉SurfaceView匹配它的高度,所以我对您的AdView没有空间感到惊讶。

建议您使用LinearLayout而不是RelativeLayout并让SurfaceView使用

layout_height="wrap_content"
layout_width="match_parent"
layout_weight="1" 

以便显示AdView,但SurfaceView会展开以填充剩余空间。