Android - полностью скрыть статус и панель навигации для приложения с навигационным ящиком и панелью приложений - PullRequest
4 голосов
/ 03 мая 2020

Как я могу динамически скрыть статус и панель навигации полностью ?

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

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

Я создал минимальное демонстрационное приложение . Слева находится обычное приложение. При нажатии на FAB приложение должно отображаться в полноэкранном режиме.

enter image description here

Как я могу скрыть бары?

ВОПРОС: Напишите, пожалуйста, какие изменения необходимы в минимальном демонстрационном проекте?

Я пробовал много разных альтернатив.

Альтернатива 1: просто скрыть это

View decorView = MainActivity.mainActivity.getWindow().getDecorView();
decorView.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);

Нет, не работает. При изменении colorPrimaryDark (ниже) этот цвет помещается на панель.

<style name="Base.Theme.Xyz" parent="Theme.AppCompat.Light.NoActionBar">
  ...
  <item name="colorPrimaryDark">@color/my_primary_dark</item>

Альтернатива-2: Я использую IMMERSE_STICKY, но это не имеет значения в поведении.

Альтернатива-3: Раньше я также пробовал сочетания этих элементов стилей: ничего не изменилось.

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowTranslucentNavigation">true</item>

Альтернатива-4: Я прочитал этот знаменитый пост на весь экран , но это не помогает.

Альтернатива-5: Еще один знаменитый трюк не помогает:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        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);
    }
}

Альтернатива-6: возвращение к тому, что работает. Получение лучшего диагноза.

После прочтения этого поста я сначала создал простое полноэкранное приложение (AS> new ...). Это отлично работает. Затем я начал создавать стандартное приложение с навигационным ящиком. Затем я начал перемещать основной код полноэкранного приложения в приложение Navigation Drawer ... и это приводит к тому же поведению. Результат в проекте.

1 Ответ

0 голосов
/ 03 мая 2020

Go в значениях> стили

Тема "Сейчас в приложении" используется

Чтобы сделать панель навигации прозрачной

<item name="android:windowTranslucentNavigation">true</item>

Чтобы удалить ее, сделайте ее цвет соответствующим вашему макет

<item name="android:navigationBarColor">@color/white</item>

ИЛИ Попробуйте это

public void FullScreencall() {
    if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
        View v = this.getWindow().getDecorView();
        v.setSystemUiVisibility(View.GONE);
    } else if(Build.VERSION.SDK_INT >= 19) {
        //for new api versions.
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiOptions);
    }
}
...