Unity android immersive mode

Using Immersive Full-Screen Mode

This lesson teaches you to

You should also read

Try it out

Video

DevBytes: Android 4.4 Immersive Mode

Android 4.4 (API Level 19) introduces a new SYSTEM_UI_FLAG_IMMERSIVE flag for setSystemUiVisibility() that lets your app go truly «full screen.» This flag, when combined with the SYSTEM_UI_FLAG_HIDE_NAVIGATION and SYSTEM_UI_FLAG_FULLSCREEN flags, hides the navigation and status bars and lets your app capture all touch events on the screen.

When immersive full-screen mode is enabled, your activity continues to receive all touch events. The user can reveal the system bars with an inward swipe along the region where the system bars normally appear. This clears the SYSTEM_UI_FLAG_HIDE_NAVIGATION flag (and the SYSTEM_UI_FLAG_FULLSCREEN flag, if applied) so the system bars become visible. This also triggers your View.OnSystemUiVisibilityChangeListener , if set. However, if you’d like the system bars to automatically hide again after a few moments, you can instead use the SYSTEM_UI_FLAG_IMMERSIVE_STICKY flag. Note that the «sticky» version of the flag doesn’t trigger any listeners, as system bars temporarily shown in this mode are in a transient state.

Figure 1 illustrates the different «immersive mode» states:

Figure 1. Immersive mode states.

    Non-immersive mode—This is how the app appears before it enters immersive mode. It is also how the app appears if you use the IMMERSIVE flag, and the user swipes to display the system bars, thereby clearing the SYSTEM_UI_FLAG_HIDE_NAVIGATION and SYSTEM_UI_FLAG_FULLSCREEN flags. Once these flags are cleared, the system bars reappear and remain visible.

Note that it’s best practice to keep all UI controls in sync with the system bars, to minimize the number of states your screen can be in. This provides a more seamless user experience. So here all UI controls are displayed along with the status bars. Once the app enters immersive mode, the UI controls are hidden along with the system bars. To ensure that your UI visibility stays in sync with system bar visibility, make sure to provide an appropriate View.OnSystemUiVisibilityChangeListener to watch for changes, as described in Responding to UI Visibility Changes.

Reminder bubble—The system displays a reminder bubble the first time users enter immersive mode in your app. The reminder bubble reminds users how to display the system bars.

Note: If you want to force the reminder bubble to appear for testing purposes, you can do so by putting the app in immersive mode, turning off the screen with the power button, and then turning the screen back on again within 5 seconds.

  • Immersive mode—This is the app in immersive mode, with the system bars and other UI controls hidden. You can achieve this state with either IMMERSIVE or IMMERSIVE_STICKY .
  • Sticky flag—This is the UI you see if you use the IMMERSIVE_STICKY flag, and the user swipes to display the system bars. Semi-transparent bars temporarily appear and then hide again. The act of swiping doesn’t clear any flags, nor does it trigger your system UI visibility change listeners, because the transient appearance of the system bars isn’t considered a UI visibility change.
  • Note: Remember that the «immersive» flags only take effect if you use them in conjunction with SYSTEM_UI_FLAG_HIDE_NAVIGATION , SYSTEM_UI_FLAG_FULLSCREEN , or both. You can just use one or the other, but it’s common to hide both the status and the navigation bar when you’re implementing «full immersion» mode.

    Choose an Approach

    The flags SYSTEM_UI_FLAG_IMMERSIVE and SYSTEM_UI_FLAG_IMMERSIVE_STICKY both provide an immersive experience, but with the differences in behavior described above. Here are examples of when you would use one flag vs. the other:

    • If you’re building a book reader, news reader, or a magazine, use the IMMERSIVE flag in conjunction with SYSTEM_UI_FLAG_FULLSCREEN and SYSTEM_UI_FLAG_HIDE_NAVIGATION . Because users may want to access the action bar and other UI controls somewhat frequently, but not be bothered with any UI elements while flipping through content, IMMERSIVE is a good option for this use case.
    • If you’re building a truly immersive app, where you expect users to interact near the edges of the screen and you don’t expect them to need frequent access to the system UI, use the IMMERSIVE_STICKY flag in conjunction with SYSTEM_UI_FLAG_FULLSCREEN and SYSTEM_UI_FLAG_HIDE_NAVIGATION . For example, this approach might be suitable for a game or a drawing app.
    • If you’re building a video player or some other app that requires minimal user interaction, you can probably get by with the lean back approach, available since Android 4.0 (API Level 14). For this type of app, simply using SYSTEM_UI_FLAG_FULLSCREEN and SYSTEM_UI_FLAG_HIDE_NAVIGATION should be sufficient. Don’t use the «immersive» flags in this case.
    Читайте также:  Включить вторую камеру андроид

    Use Non-Sticky Immersion

    When you use the SYSTEM_UI_FLAG_IMMERSIVE flag, it hides the system bars based on what other UI flags you have set ( SYSTEM_UI_FLAG_HIDE_NAVIGATION , SYSTEM_UI_FLAG_FULLSCREEN , or both). When the user swipes inward in a system bars region, the system bars reappear and remain visible.

    It’s good practice to include other system UI flags (such as SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION and SYSTEM_UI_FLAG_LAYOUT_STABLE ) to keep the content from resizing when the system bars hide and show. You should also make sure that the action bar and other UI controls are hidden at the same time. This snippet demonstrates how to hide and show the status and navigation bars, without resizing the content:

    You may also want to implement the following in conjunction with the IMMERSIVE flag to provide a better user experience:

    • Register a listener so that your app can get notified of system UI visibility changes, as described in Responding to UI Visibility Changes.
    • Implement onWindowFocusChanged() . If you gain window focus, you may want to re-hide the system bars. If you lose window focus, for example due to a dialog or pop up menu showing above your app, you’ll probably want to cancel any pending «hide» operations you previously scheduled with Handler.postDelayed() or something similar.
    • Implement a GestureDetector that detects onSingleTapUp(MotionEvent) , to allow users to manually toggle the visibility of the system bars by touching your content. Simple click listeners aren’t the best solution for this because they get triggered even if the user drags a finger across the screen (assuming the click target takes up the whole screen).

    For more discussion of these topics, watch the video DevBytes: Android 4.4 Immersive Mode.

    Use Sticky Immersion

    When you use the SYSTEM_UI_FLAG_IMMERSIVE_STICKY flag, an inward swipe in the system bars areas causes the bars to temporarily appear in a semi-transparent state, but no flags are cleared, and your system UI visibility change listeners are not triggered. The bars automatically hide again after a short delay, or if the user interacts with the middle of the screen.

    Figure 2 shows the semi-transparent system bars that briefly appear and then hide again when you use the IMMERSIVE_STICKY flag.

    Figure 2. Auto-hiding system bars.

    Below is a simple approach to using this flag. Any time the window receives focus, simply set the IMMERSIVE_STICKY flag, along with the other flags discussed in Use IMMERSIVE. For example:

    Источник

    Immersive Mode (режим погружения) в Android 4.4 KitKat

    31 октября 2013 года Google представили новую версию ОС Android 4.4 KitKat, в которой появилось очень много интересных функций для разработчиков. Одна из этих функций — Immersive Mode (режим погружения). Режим погружения — это режим, в котором ваша программа показывается пользователю на весь экран, при этом не видны любые системные панели, в том числе и панель навигации (та, что с кнопкой Back). До Android 4.4 была также возможность скрывать системные панели (панель навигации и панель статуса). Но в существующем варианте был один недостаток — пользователь не мог полностью погрузится в контент, так как любое нажатие на контент снова вызывало отображение системных панелей. Новый режим погружения добавляет еще один способ взаимодействия с отображением системных панелей. В этом режиме, чтобы отобразить системные панели пользователю достаточно сделать свайп от верхнего или нижнего края экрана по направлению к центру экрана, при этом отображение панелей по нажатию на контент делать необязательно, тем самым можно создавать приложения и игры, в которых пользователь может полноценно взаимодействовать с приложением или игрой любыми жестами. Чтобы пользователь понял, как вызвать системные панели из полноэкранного режима, при первом запуске приложения ему автоматически покажется системное сообщение о том, как снова отобразить эти панели на экране.

    Читайте также:  Лучший офис для андроид без рекламы

    Также вы могли подумать, что есть другая проблема использования этого режима. Например, пользователь запустил программу для рисования и хочет нарисовать линию от края экрана и как же так, неужели ему в этом случае отобразится системная панель. Да, но при этом приложение также будет получать сообщения от нажатий на экран и будет рисовать линию. Кстати, теперь можно просто сделать системные панели полупрозрачными с помощью двух новых тем — Theme.Holo.NoActionBar.TranslucentDecor и Theme.Holo.Light.NoActionBar.TranslucentDecor. Но стоит помнить, что в этом случае ваш контент будет занимать всю область на экране и будет видим даже за полупрозрачными системными панелями. Если вам необходимо, чтобы какая-та часть интерфейса не заезжала за пределы системных панелей (например, какие-то дополнительные панели), вам необходимо указать для родительского layout этого контента атрибут fitsSystemWindows равным true. Не очень приятная вещь с этими темами в том, что тут используется неполноценная полупрозрачность для панелей, а градиентная (от черного цвета к полупрозрачному), что не всегда выглядит красиво. Если вы создаете свою кастомную тему, вы можете отнаследоваться от этих новых тем, либо добавить вручную два новых свойства windowTranslucentNavigation (прозрачна ли системная панель навигации) и windowTranslucentStatus (прозрачна ли системная панель статуса с часиками).

    А как же снова попасть в полноэкранный режим, когда панели уже отображаются? У пользователя есть несколько вариантов — нажать на любой контент вне системных панелей, подождать некоторое время, чтобы панели скрылись автоматически, или сделать свайп от центра экрана к краю. Все эти варианты программист может предусмотреть в своем приложении. Для этого команда Android сделала так, чтобы эти способы взаимодействия с Immersive Mode можно было реализовать очень просто. Есть два типа режима погружения — обычный и sticky («липкий»). В обычном режиме программисту надо самому решать, когда скрывать панели, а в sticky-режиме системные панели будут скрываться автоматически. Для установки обоих типов режима погружения необходимо воспользоваться методом setSystemUiVisibility(), только передать в параметры разные флаги. Вызывать этот метод необходимо у так называемого Decor View, который представляет собой внешний вид окна Activity со всем его оформлением и содержимым. Ссылку на этот View получить очень просто.

    Давайте рассмотрим оба типа режима погружения поподробнее.

    Обычный Immersive Mode

    Для установки обычного режима используется флаг SYSTEM_UI_FLAG_IMMERSIVE в качестве параметра метода setSystemUiVisibility().

    Лучше всего для работы с обычным immersive-режимом сделать два простых метода, которые будут показывать и скрывать системные панели соответственно.

    Для тех случаев, когда показывать и скрывать системные панели вам нужно по нажатию на контент (contentView), необходимо использовать следующий код. Это может пригодится, например, при просмотре видео, как в YouTube, где вам не нужно взаимодействовать с контентом во время его просмотра.

    Если при этом у вас в приложении есть какие-то свои панели (controlsView), которые тоже надо скрыть вместе с системными, вы это также можете просто сделать, написав следующий код. Тут скрытие и появление происходит с использованием анимации альфа-канала и позиции по Y вашей панели.

    Если при запуске приложения вы хотите показать пользователю, что у приложения есть панели, а потом их скрыть через некоторое время, это тоже довольно просто делается.

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

    Читайте также:  Сохранения star wars kotor android

    В этом случае панель покажется и потом исчезнет через заданное вами время.

    Immersive Mode Sticky

    Для установки sticky-режима используется флаг SYSTEM_UI_FLAG_IMMERSIVE_STICKY в качестве параметра метода setSystemUiVisibility().

    Этот режим чрезвычайно прост. Если вам необходима ситуация, при которой системные панели будут скрываться, когда окно получает фокус или проходит некоторое время после появлении панелей, то этот режим для вас. Для включения этого режима вам необходимо установить для окна, когда оно находится в фокусе, флаг SYSTEM_UI_FLAG_IMMERSIVE_STICKY. В этом режиме, если окно теряет фокус, оно автоматически сбрасывается до состояния, в котором окно было до установки флага SYSTEM_UI_FLAG_IMMERSIVE_STICKY, то есть со всеми панелями. Как только окно получает фокус, панели опять исчезают через некоторое время и вам нет нужды программировать эту ситуацию вручную. Чтобы показать системные панели надо также, как и в обычном режиме, сделать свайп от краев экрана. Включение stick-режима делается простым куском кода.

    Источник

    Immersive Mode — Режим погружения (Android 4.4)

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

    Разработчики Android поняли о существовании этой проблемы и добавили в систему, начиная с Android 4.4, новые флаги, которые отвечают за новый режим погружения — Immersive Mode. Кстати, некоторые производитель уже раньше пытались использовать такие возможности в своих устройствах, но теперь это стало стандартом.

    Суть погружения проста — пользователь должен сфокусироваться на содержании приложения и панели не должные его отвлекать во время чтения, просмотра, игры. Существует два способа погружения — полное и частично. При полном погружении панель навигации и строка состояния исчезают полностью. Чтобы их вернуть обратно, нужно сделать движение пальцем от верхнего (или нижнего) края экрана к центру. При частичном погружении аналогичное движение выводит скрытые части интерфейса на несколько секунд в полупрозрачном виде, которые затем автоматически исчезают снова. Если пользователь действительно хочет нажать на кнопку на панели навигации, то он должен уложиться в отведённое время. Не тормози!

    Рассмотрим несколько примеров. Для демонстрации нам понадобятся две кнопки в стандартном проекте. Не забывайте, что пример должен работать для API 19 и выше.

    Сначала приведу код

    Для удобства вынесем методы скрытия и показа системных панелей в отдельные методы showSystemUI() и hideSystemUI(). У объекта View есть знакомый нам метод setSystemUiVisibility(), которому нужно передать нужные флаги. Посмотрим, что получится, если мы попытаемся скрыть системные панели с флагом SYSTEM_UI_FLAG_IMMERSIVE (щелчок на первой кнопке).

    Если это произошло в первый раз в вашем приложении, то пользователь увидит следующее. Экран затемнится и поверх него появится подсказка Чтобы вернуться в обычный режим, проведите пальцем вниз и кнопка OK. Если пользователь нажмёт на кнопку OK, то он больше не увидит подсказку при следующем запуске приложения. Будет считаться, что пользователь запомнил эту настройку.

    После нажатия кнопки OK или при повторном запуске вы увидите приложение в полноэкранном режиме.

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

    Пример с частичным погружением реализован в методе onWindowFocusChanged(). Как только ваше приложение запустится на экране и получит фокус, то сразу перейдёт в режим частичного погружения. При движении пальцем от краёв экрана, вы увидите на несколько секунд системные панели в полупрозрачном состоянии.

    Разница заключается в одном флаге. Вместо флага SYSTEM_UI_FLAG_IMMERSIVE нужно использовать флаг SYSTEM_UI_FLAG_IMMERSIVE_STICKY.

    В реальном приложении вам не нужно использовать два режима одновременно. Здесь это показано в демонстрационных целях. Режим полного погружения желательно использовать при чтении книг, журналов, новостей. Частичное погружение рекомендуют использовать в играх и рисовалках.

    Источник

    Оцените статью