Android上的Admob - 恢复活动时未覆盖状态栏区域

时间:2011-05-10 20:47:35

标签: android admob statusbar android-homebutton

我正在经历一个非常讨厌的错误,试图在我的网站中实现Admob 应用。 我认为问题出在我的代码中,但经过一些调查我 发现它也存在于Android-Banner-Essentials示例中(可供下载here)。 我想知道是否有人遇到过这个问题,或者知道如何处理 用它。

基本上,当应用程序同时禁用状态和标题栏时,它 应该全屏使用。 Banner Essentials示例仅显示Admob横幅 非常顶级的区域。 我下载了这个例子,只更改了两件事:

  • 添加了我的发布商ID以正确编译并接收任何广告;)
  • 在活动清单中添加了一个参数,以禁用标题和状态 酒吧: 机器人:主题= “@机器人:风格/ Theme.NoTitleBar.Fullscreen”

编译的二进制文件,无论它启动了什么设备(尝试过Nexus One,G1,Desire,不同的Android版本),都会遇到同样的问题:

  • 显示广告横幅时,按主页,
  • 一旦被带回主屏幕,请按住Home以查看最近 推出了应用,
  • 选择返回Banner Essentials应用程序。

我的测试显示Admob横幅没有50%的复制机会 回到它的位置 - 屏幕的顶部。 为了更好地展示我的意思,我准备了三个屏幕截图:

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

重要告示:

  • 当应用程序正常恢复时,横幅显示在状态下方 栏,并向上滑动,直到与顶部屏幕边框对齐,
  • 出现错误时横幅根本不移动
  • 我无法重现任何其他中断的问题(按下 返回,电源按钮),
  • 我认为它可能以某种方式与获得/失去焦点有关(见 截图)。

我的应用程序比Banner Essentials稍微复杂一点,所以我开始在我的代码中搜索问题,没有运气,因此试图尽可能地简化情况,这是结果。

有谁知道可能导致问题的原因?也许必须设置一些额外的标志或属性来处理这种行为?

2 个答案:

答案 0 :(得分:4)

这个被引用为Android错误。没有解决方案,只是一种解决方法。 你必须在onResume之后重新设置Window Fullscreen大约1秒(等到状态栏完成它的幻想滑动动画......),这将导致它重新/计算整个布局,“解决”问题(与快速跳转到正确的位置。)

public void onResume()
{

  ...

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

  ...

}

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

答案 1 :(得分: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.
     */
}