Мое приложение забывает флаги видимости окна - PullRequest
0 голосов
/ 18 января 2019

У меня есть два приложения, оба используют один и тот же код в onCreate основной активности, чтобы скрыть панель в верхней части экрана и т. Д .:

if (Build.VERSION.SDK_INT >= 23) {
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

Одно приложение представляло собой простое тестовое приложение, в котором оно отображает только пару кнопок, и этот код прекрасно работает. Поэтому я добавил код в уже существующее второе приложение, которое имеет более низкий уровень API и создает WebView. Однако, к моему удивлению, я обнаружил, что, хотя этот код работает изначально, как только я делаю что-то вне приложения, например, переключаюсь на другое приложение и возвращаюсь, или, что более важно, просто выключаю экран и затем снова включаю его. on - приложение внезапно «забывает» эти флаги, в результате чего системная строка появляется в верхней части экрана и окно отображается неправильно, так как кажется, что WebView пытается нарисовать верхнюю часть моей страницы под строкой состояния.

Я обнаружил, что могу обойти эту проблему - своего рода - вызвав вышеуказанный код в onWindowFocusChanged, но это часто приводит к своего рода «мерцанию» на экране, когда на мгновение экран будет отображаться неправильно, с панель вверху и неправильный макет, а затем флаги будут восстановлены и все перерисовано. Это не приемлемое долгосрочное решение, так как это приложение предназначено для использования в темной среде (отсюда скрытие всего, что позволяет нарисовать очень темный интерфейс), и кратковременная яркая вспышка света будет разрушительной.

Похоже, что с этим обходным путем есть и вторичная проблема, заключающаяся в том, что затрудняет перемещение кнопок навигации в нижней части экрана, так как изменение фокуса вызывает срабатывание и ускоряет скрытие этих же кнопок.

Поскольку это работает в моей тестовой программе без проблем и не требует обходного пути, я знаю, что можно сохранить эти флаги, но я не уверен, какая разница в том, что делает его неудачным в моем полном приложении. Я подумал, что это может быть тот факт, что минимальный и / или целевой уровни API разные, или что это может быть что-то дополнительное, мне нужно настроить его для работы с WebView (но что?), Или это может быть что-то Абсолютно другой. Что мне не хватает, из-за чего окно моего приложения забывает свои флаги?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...