Как повторно показать строку состояния после выхода из полноэкранного режима + панель навигации не исчезнет после появления

У меня есть видео, которое воспроизводится в маленьком окне с возможностью перехода в полноэкранный режим. Однако проблема в том, что скрытие / отображение строки состояния и панели навигации не работают должным образом. Я пробовал почти все решения, представленные в Stackoverflow, но ни одно из них не сработало. Это моя деятельность, которая находится в правильном состоянии пользовательского интерфейса:

Перед воспроизведением видео и переходом в полноэкранный режим

Вот как я вхожу в полноэкранный режим:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    getWindow().getDecorView().setSystemUiVisibility(
             View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            // Hide the nav bar and status bar
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN);

Вот как я выхожу из полноэкранного режима:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

Первая проблема заключается в том, что в полноэкранном режиме и статус, и панель навигации правильно скрыты. Однако при первом прикосновении к экрану панель навигации будет видна, но больше никогда не скроется (я использую режим Leanback). Здесь можно увидеть:

Панель навигации не исчезнет после первого касания в полноэкранном режиме

Вторая проблема связана со строкой состояния. Когда видео завершится и вы выйдете из полноэкранного режима. Строка состояния перекрывается и не отображается должным образом. Показано ниже:

Строка состояния не отображается после выхода из полноэкранного режима


person Mehdi Satei    schedule 18.07.2019    source источник


Ответы (1)


Итак, наконец, нашел, что ответ сработал для меня:

private void hideSystemUI() {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().getDecorView().setSystemUiVisibility(
            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
            |View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

    );
}

private void showSystemUI() {
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().getDecorView().setSystemUiVisibility(View.VISIBLE);
}
person Mehdi Satei    schedule 18.07.2019
comment
Не стесняйтесь принять мой ответ, если считаете, что он был полезен для вас. :-) - person AskNilesh; 19.07.2019
comment
Это должно быть getWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_VISIBLE); - person Alexei Artsimovich; 09.02.2021