我正在尝试在游戏顶部添加横幅广告。我的活动使用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请求,然后广告出现。
因此广告只会在我发出第二个请求后显示。有谁知道这里发生了什么?
答案 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会展开以填充剩余空间。