Подтвердить что ты не робот

Как отобразить полноэкранное окно TYPE_SYSTEM_ALERT?

В настоящее время мне трудно отображать окно 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);

Любые идеи?

Спасибо

4b9b3361

Ответ 1

Я нашел решение, пытаясь сделать что-то еще!

Чтобы окно 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);

Ответ 2

Это больше не работает в сэндвиче с мороженым. Строка состояния охватывает окно TYPE_SYSTEM_ALERT. Но TYPE_SYSTEM_OVERLAY все еще работает нормально.