2011-05-10 38 views
4

我在嘗試在我的 應用程序中嘗試實施Admob時遇到了非常噁心的錯誤。 我認爲問題出在我的代碼中,但經過一番調查後,我發現它也出現在Android-Banner-Essentials示例中(可供下載here)。 我想知道有沒有人遇到過這個問題,或者知道如何處理 。Android上的Admob - 活動恢復時未覆蓋狀態欄區域

基本上,當應用程序同時禁用狀態欄和標題欄時, 應該使用全屏。 Banner Essentials示例在 可用區域的頂部顯示Admob橫幅。 我下載的例子中,改變的只有兩件事:

  • 加入我的發佈者ID正確地編譯和接收任何廣告;)
  • 加入一個參數去活動的清單禁用標題和狀態 條: 機器人:主題=「@安卓風格/ Theme.NoTitleBar.Fullscreen」

編譯的二進制,不管是什麼設備就啓動了(試過歌Nexus One,G1,慾望,不同的Android版本),受影響具有相同問題:

  • 當廣告橫幅顯示按Home鍵,
  • 一旦帶回到主屏幕按住首頁看到最近 推出的應用程序,
  • 選擇後旗必備應用。

我的測試表明,有50%的複製機會Admob橫幅不會 回到它的位置 - 屏幕的頂部。 爲了更好地說明我的意思我準備了三個截圖:

http://img841.imageshack.us/g/correctz.png/

重要告示:

  • 當應用程序正常恢復,橫幅下方狀態 欄上顯示,並向上滑動,直至放置在頂部屏幕邊框,
  • 當錯誤出現的橫幅完全不動,
  • 我不能與任何其他中斷程序重現問題噸(按 背面,電源按鈕),
  • 我認爲它可能以某種方式連接到獲得/失去焦點(見 截圖)。

我的應用程序是有點複雜得多橫幅要點,所以我開始在我的代碼搜索的問題,沒有運氣,從而試圖簡化儘可能的情況,這裏的結果。

有誰知道什麼可能會導致問題?也許一些額外的標誌或屬性必須設置來處理這種行爲?

+0

嗨!你是否設法解決了這個問題,或者至少找到了原因呢? (我剛剛跳進去......) – vmatyi 2011-09-19 10:15:09

回答

4

這個被引用爲Android錯誤。沒有解決方案,只是一種解決方法。 您必須在onResume後大約1秒重新設置Window Fullscreen(等待狀態欄完成其幻想滑出動畫...),這將導致它重新計算整個佈局,「解決」問題(快速跳到正確的位置)。

public void onResume() 
{ 

    ... 

    handler.postDelayed(new Runnable() { 
     public void run() { 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
          WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     } 
    }, 1500); 

    ... 

} 

這不好。但它仍然是最好的。更多信息here

0

在我的情況下,這種行爲是由鎖定屏幕恢復觸發的。不知道爲什麼,但添加空重載功能後,它是固定的(但我只在我的HTC Wilfire測試它)。這可能是一個不同的錯誤。

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    /* Workaround a probable Android bug with fullscreen activities: 
    * on resume status bar hides and black margin stays, 
    * reproducible half of the time when coming back from lock screen 
    * (tested on HTC Wildfire) 
    * No idea why but this empty overload method fixed it. 
    */ 
}