【问题标题】:Android AdMob: addView doesn't show ad until return to activityAndroid AdMob:addView 在返回活动之前不会显示广告
【发布时间】:2019-09-07 20:32:10
【问题描述】:

我正在尝试在我的游戏顶部添加横幅广告。我的活动使用带有自定义 SurfaceView 的 RelativeLayout。我希望广告与 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 首次运行时,加载广告的代码作为 Runnable 由 RenderThread 发布到 UI 线程。

有人知道如何让广告立即展示吗?或者为什么只有当我返回活动时才会绘制广告?

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

谢谢, 汤姆。


编辑

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

什么有效:我在 onAdLoaded 回调中发出另一个 adLoad 请求,然后广告就显示出来了。

所以广告只在我提出第二个请求后才会显示。有人知道这里发生了什么吗?

【问题讨论】:

  • 您是否找到了更好的解决方案来调用它两次?我发现我有同样的问题,如果我加载一次,它告诉我广告已加载但我什么也看不到;当我再次加载它时,它会等待几秒钟然后变得可见。

标签: android admob overlay surfaceview android-relativelayout


【解决方案1】:

我遇到了同样的问题,我所要做的就是在加载时将 adView 放到前面。 (我建议重载两次)

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

【讨论】:

  • 这很好用,但是在我的情况下,我在 GLSurfaceView(切换菜单覆盖)之上还有一些其他视图,我不希望广告出现在所有内容的前面。我注意到让另一个视图可见,然后立即 GONE 再次解决了这个问题。
【解决方案2】:

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

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

比提出重复的广告请求浪费更少,而且您不必牺牲原来的 z 顺序。

【讨论】:

    【解决方案3】:

    你已经告诉你的 SurfaceView 匹配它的高度,所以我并不惊讶你的 AdView 没有空间。

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

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

    这样会显示 AdView,但 SurfaceView 会扩展以填充剩余空间。

    【讨论】:

      猜你喜欢
      • 2012-09-28
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多