Скрыть панель навигации

В этом уроке описывается, как скрыть панель навигации, которая появилась в Android 4.0 (уровень API 14).

Несмотря на то, что этот урок посвящен сокрытию панели навигации, вам следует спроектировать свое приложение так, чтобы в то же время скрывать строку состояния, как описано в разделе «Скрытие строки состояния» . Скрытие строк навигации и состояния (при сохранении их легкого доступа) позволяет содержимому использовать все пространство дисплея, тем самым обеспечивая более захватывающий пользовательский опыт.

системные панели

Рисунок 1. Панель навигации.

Скрыть панель навигации

Вы можете скрыть панель навигации, используя флаг SYSTEM_UI_FLAG_HIDE_NAVIGATION . Этот фрагмент скрывает как панель навигации, так и строку состояния:

Котлин

window.decorView.apply {
    // Hide both the navigation bar and the status bar.
    // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
    // a general rule, you should design your app to hide the status bar whenever you
    // hide the navigation bar.
    systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
}

Ява

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

Обратите внимание на следующее:

  • При таком подходе прикосновение к любому месту экрана приводит к тому, что панель навигации (и строка состояния) появляется снова и остается видимой. В результате взаимодействия с пользователем флаги сбрасываются.
  • После очистки флагов вашему приложению необходимо сбросить их, если вы хотите снова скрыть панели. См. раздел «Реакция на изменения видимости пользовательского интерфейса» , где обсуждается, как прослушивать изменения видимости пользовательского интерфейса, чтобы ваше приложение могло реагировать соответствующим образом.
  • То, где вы устанавливаете флаги пользовательского интерфейса, имеет значение. Если вы скроете системные панели в методе onCreate() своей активности и пользователь нажмет «Домой», системные панели появятся снова. Когда пользователь повторно открывает действие, onCreate() не будет вызываться, поэтому системные панели останутся видимыми. Если вы хотите, чтобы изменения системного пользовательского интерфейса сохранялись, когда пользователь входит в вашу деятельность и выходит из нее, установите флаги пользовательского интерфейса в onResume() или onWindowFocusChanged() .
  • Метод setSystemUiVisibility() имеет эффект только в том случае, если представление, из которого вы его вызываете, видимо.
  • Выход из представления приводит к очистке флагов, установленных с помощью setSystemUiVisibility() .

Сделайте контент видимым за панелью навигации

В Android 4.1 и более поздних версиях вы можете настроить отображение содержимого вашего приложения за панелью навигации, чтобы размер содержимого не изменялся при скрытии и отображении панели навигации. Для этого используйте SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION . Вам также может потребоваться использовать SYSTEM_UI_FLAG_LAYOUT_STABLE чтобы помочь вашему приложению поддерживать стабильный макет.

Когда вы используете этот подход, вы несете ответственность за то, чтобы критические части пользовательского интерфейса вашего приложения не закрывались системными панелями. Более подробное обсуждение этой темы см. в уроке «Скрытие строки состояния» .