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

Tom*_*rin 6 android overlay surfaceview relativelayout admob

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

广告加载并且可以点击,但不会被绘制到屏幕上.当我离开活动和回报,广告绘制(例如,通过按下home键,然后通过近期]菜单返回到应用程序).

这不是等待广告加载的问题,因为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"/>
Run Code Online (Sandbox Code Playgroud)

加载广告的代码张贴一个Runnable由RenderThread UI线程当RenderThread是第一次运行.

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

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

谢谢,汤姆.


编辑

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

有效:我在onAdLoaded回调中制作了另一个adLoad请求,然后广告出现了.

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

小智 10

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

mAdView.setAdListener(new AdListener()
{
    public void onAdLoaded()
    {
        Log.i("Ads", "onAdLoaded");
        mAdView.bringToFront();
    }
}
Run Code Online (Sandbox Code Playgroud)


Wil*_*iam 0

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

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

layout_height="wrap_content"
layout_width="match_parent"
layout_weight="1" 
Run Code Online (Sandbox Code Playgroud)

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