2014-02-21 51 views
4

我正在嘗試將橫幅廣告添加到我的遊戲頂部。我的活動使用具有自定義SurfaceView的RelativeLayout。我希望廣告重疊SurfaceView。Android AdMob:addView直到返回活動狀態才顯示廣告

廣告加載並且是可點擊的,但沒有繪製到屏幕上。當我離開活動並返回時,會繪製廣告(例如,按主頁按鈕,然後通過最近的菜單返回到應用程序)。

這不是等待廣告加載的問題,因爲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到UI線程時RenderThread是第一次運行。

有沒有人有任何想法,我可以使廣告顯示馬上?或者爲什麼只有在我返回活動時纔會繪製廣告?

我試着在RelativeLayout上調用forceLayout()/ requestLayout(),但這沒有幫助。我也試圖在視圖上調用invalidate()。

謝謝, 湯姆。


編輯

我添加了一個AdListener的到AdView中,我們可以確認onAdLoaded被調用。廣告已加載但不可見。

什麼作品:我在onAdLoaded回調中發出另一個adLoad請求,然後顯示廣告。

因此,該廣告僅在我提出第二個請求後纔會顯示。任何人都知道這裏發生了什麼?

+0

您是否找到更好的解決方案來調用它兩次? 我發現我有同樣的問題,如果我加載一次,它告訴我廣告已加載,但我什麼都看不到;當我再次加載它時,它會等待幾秒鐘,然後變得可見。 – Doolali

回答

0

你已經告訴你的SurfaceView匹配它的高度,所以我不驚訝你的AdView沒有空間。

建議你使用的LinearLayout代替的RelativeLayout並有SurfaceView使用

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

,讓你的AdView顯示,但SurfaceView擴展以填充剩餘的空間。

9

我有同樣的問題,我所要做的就是將adView加載到前端。 (我推薦這個過載兩次)

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

這工作正常,但在我的情況下,我有一些其他意見頂部的GLSurfaceView(切換菜單覆蓋),我不希望廣告前面的一切。我注意到,使另一個視圖可見,然後立即再次修復這個問題。 – atablash

2

我有同樣的問題,並在onAdLoaded AdView的可見性設置爲消失了,然後回似乎解決它爲我:

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

比創建重複的廣告請求浪費更少,而且您不必犧牲原始的z訂單。

相關問題