如何显示全屏TYPE_SYSTEM_ALERT窗口?

时间:2011-06-16 11:59:47

标签: android android-layout

我目前很难在全屏模式下显示TYPE_SYSTEM_ALERT窗口。我想这样做是为了在状态栏上有一个从服务创建的叠加视图,但不隐藏它。

但是,将FLAG_FULLSCREEN标志放在我正在创建的窗口的布局参数中似乎不起作用。我找到了STATUS_BAR和EXPAND_STATUS_BAR权限,但我找不到如何使用它们。

以下是LayoutParams:

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.RIGHT | Gravity.TOP;

    mWindowManager.addView(mOverlayView, params);

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:18)

我在尝试做其他事情时找到了解决方案!

为了在每个其他窗口的顶部设置TYPE_SYSTEM_ALERT窗口并在状态栏的顶部,您必须添加FLAG_LAYOUT_IN_SCREEN标志而不是FLAG_LAYOUT_FULLSCREEN标志:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
        PixelFormat.TRANSLUCENT);

mWindowManager.addView(mOverlayView, params);

答案 1 :(得分:4)

它在冰淇淋三明治中不起作用了。状态栏包含TYPE_SYSTEM_ALERT窗口。但是TYPE_SYSTEM_OVERLAY仍然有效。