【发布时间】: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