Некоторый контент лучше всего воспринимается в полноэкранном режиме без каких-либо индикаторов на строке состояния или панели навигации. Вот некоторые примеры: видео, игры, галереи изображений, книги и слайды презентаций. Это называется режимом погружения . На этой странице показано, как можно глубже вовлечь пользователей с помощью контента в полноэкранном режиме.

Режим погружения помогает пользователям избегать случайных выходов во время игры и обеспечивает захватывающий опыт для наслаждения изображениями, видео и книгами. Однако помните о том, как часто пользователи заходят и выходят из приложений, чтобы проверить уведомления, провести импровизированный поиск или выполнить другие действия. Поскольку режим погружения приводит к тому, что пользователи теряют легкий доступ к навигации по системе, используйте режим погружения только тогда, когда польза для пользовательского опыта выходит за рамки простого использования дополнительного пространства экрана.
Используйте WindowInsetsControllerCompat.hide()
, чтобы скрыть системные панели, и WindowInsetsControllerCompat.show()
чтобы вернуть их.
В следующем фрагменте показан пример настройки кнопки для скрытия и отображения системных панелей.
Котлин
override fun onCreate(savedInstanceState: Bundle?) { ... val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView) // Configure the behavior of the hidden system bars. windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE // Add a listener to update the behavior of the toggle fullscreen button when // the system bars are hidden or revealed. ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, windowInsets -> // You can hide the caption bar even when the other system bars are visible. // To account for this, explicitly check the visibility of navigationBars() // and statusBars() rather than checking the visibility of systemBars(). if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars()) || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) { binding.toggleFullscreenButton.setOnClickListener { // Hide both the status bar and the navigation bar. windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()) } } else { binding.toggleFullscreenButton.setOnClickListener { // Show both the status bar and the navigation bar. windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) } } ViewCompat.onApplyWindowInsets(view, windowInsets) } }
Ява
@Override protected void onCreate(Bundle savedInstanceState) { ... WindowInsetsControllerCompat windowInsetsController = WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView()); // Configure the behavior of the hidden system bars. windowInsetsController.setSystemBarsBehavior( WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE ); // Add a listener to update the behavior of the toggle fullscreen button when // the system bars are hidden or revealed. ViewCompat.setOnApplyWindowInsetsListener( getWindow().getDecorView(), (view, windowInsets) -> { // You can hide the caption bar even when the other system bars are visible. // To account for this, explicitly check the visibility of navigationBars() // and statusBars() rather than checking the visibility of systemBars(). if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars()) || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) { binding.toggleFullscreenButton.setOnClickListener(v -> { // Hide both the status bar and the navigation bar. windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()); }); } else { binding.toggleFullscreenButton.setOnClickListener(v -> { // Show both the status bar and the navigation bar. windowInsetsController.show(WindowInsetsCompat.Type.systemBars()); }); } return ViewCompat.onApplyWindowInsets(view, windowInsets); }); }
При желании вы можете указать тип системных панелей, которые следует скрыть, и определить их поведение при взаимодействии с ними пользователя.
Укажите, какие системные панели следует скрыть
Чтобы указать тип системных панелей, которые необходимо скрыть, передайте один из следующих параметров в WindowInsetsControllerCompat.hide()
.
Используйте
WindowInsetsCompat.Type.systemBars()
чтобы скрыть обе системные панели.Используйте
WindowInsetsCompat.Type.statusBars()
чтобы скрыть только строку состояния.Используйте
WindowInsetsCompat.Type.navigationBars()
чтобы скрыть только панель навигации.
Укажите поведение скрытых системных панелей
Используйте WindowInsetsControllerCompat.setSystemBarsBehavior()
чтобы указать, как ведут себя скрытые системные панели при взаимодействии с ними пользователя.
Используйте
WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH
для отображения скрытых системных панелей при любых взаимодействиях пользователя на соответствующем дисплее.Используйте
WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE
, чтобы отобразить скрытые системные панели при любых системных жестах, например при проведении пальцем от края экрана, где панель скрыта.Используйте
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
для временного отображения скрытых системных панелей с помощью системных жестов, таких как смахивание от края экрана, где панель скрыта. Эти временные системные панели накладываются на содержимое вашего приложения, могут иметь некоторую степень прозрачности и автоматически скрываются после короткого тайм-аута.