Есть ли способ скрыть системную / навигационную панель в Android ICS - PullRequest
20 голосов
/ 29 марта 2012

Я хотел бы расширить обсуждение, касающееся сокрытия системной / навигационной панели в нижней части экрана на планшетных устройствах Android Ice Cream Sandwich (4.0 и выше).

Уже есть ветка ( Есть ли способ скрыть системную панель в Android 3.0? Это внутреннее устройство, и я управляю навигацией ), чтобы скрыть панель на сотовых устройствах.Мои клиенты, однако, будут использовать новейшие устройства Ice Cream Sandwich и очень хотят спрятать панель внизу экрана.Их применение не предназначено для регулярного использования потребителями, и для них очень важно захватить весь экран, чтобы обеспечить их удобство.Насколько возможно скрыть эту панель - или, по крайней мере, переопределить поведение всех кнопок - без рутирования устройств или переписывания прошивки?

Ответы [ 12 ]

24 голосов
/ 29 марта 2012

Проверить SYSTEM_UI_FLAG_HIDE_NAVIGATION, этот флаг скрывает панель навигации, пока пользователь не взаимодействует с устройством.Он был представлен в Android 4.0.Вы можете включить этот флаг, например, так:

getWindow().getDecorView()
           .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Обратите внимание, что навигация больше не исчезнет автоматически, вы должны устанавливать ее каждый раз после взаимодействия пользователя с устройством.

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

12 голосов
/ 21 марта 2014

на корневых устройствах, я использую следующую команду adb

adb shell pm disable com.android.systemui

чтобы навсегда скрыть панель навигации. Чтобы показать это снова, запустите

adb shell pm enable com.android.systemui

пока у меня все нормально работает

4 голосов
/ 06 июля 2014

Использование приведенного ниже кода является одним из способов скрыть навигацию

getWindow().getDecorView()
           .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Но проблема с вышесказанным заключается в том, что оно становится видимым, как только пользователь касается экрана.

В Android Kitkat есть функция, называемая IMMERSIVE, которая скрывает панель уведомлений и навигацию. Он не отображается, даже если пользователь взаимодействует с экраном. Однако пользователь может сделать его видимым, проведя его сверху вниз по экрану. Ниже приведен код для его достижения

//Initializew this in onCreate()
View mDecorView = getWindow().getDecorView();

//Then call this function
private void hideSystemUI() {
     mDecorView.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_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

Однако в моем случае я никогда не хотел, чтобы навигация и панель уведомлений были видны, даже если пользователь проводит пальцем сверху вниз по экрану. Я дал ему попытку, и мне удалось добиться этого частично. Я реализовал CountDownTimer, который будет вызывать hideSystemUI() каждую секунду или около того. Я знаю, что это не лучший способ сделать это. Но у меня не было другого решения для этого.

Если кто-то получит что-то, пожалуйста, дайте мне знать, как навсегда скрыть панель навигации и уведомлений :) Надеюсь, этот ответ кому-нибудь поможет в будущем:)

Просмотрите это видео, чтобы лучше понять эту функцию.

3 голосов
/ 17 ноября 2012

Обновление - есть обходной путь, который можно использовать для таких случаев (ручная настройка приложения для клиента). Действительно, панель навигации не может быть удалена в данной структуре.

Однако, есть решение, чтобы скрыть панель навигации, если рутирование устройства является опцией для вас. Вот как:

Корневое устройство

Установка и запуск Busybox

Установить HideBar

В HideBar есть опция для запуска в режиме «Киоск», в котором нет способа повторно отобразить панель навигации. Излишне говорить, что вам действительно нужно быть осторожным с этим.

Риски вовлечены:

  • блокировка устройства

  • Неправильная установка BusyBox, что может привести к затруднениям, хотя вряд ли приведет к потере информации.

  • попадание в тупик, когда вы не можете выйти из приложения. Например, если 1 в вашем графическом интерфейсе не предусмотрена опция закрытия, 2 приложение запускается автоматически при запуске, 3 HideBar не позволяет повторно отображать панель навигации, а 4 HideBar скрывает панель навигации при запуске. Однако это можно преодолеть, просто остановив / удалив приложение из adb.

Вот другие идентичные вопросы:

2 голосов
/ 30 октября 2013

Хотя это хакерское решение, я думаю, оно заслуживает внимания, поскольку не требует рутирования устройства: getWindow().getDecorView().setSystemUiVisibility(8);.

1 голос
/ 20 октября 2013

РЕДАКТИРОВАТЬ: Начиная с 4.4 (19) вы можете использовать следующее, чтобы включить то, что называется «иммерсивный режим». Он был введен для Google Cardboard vrtoolkit, но может использоваться в целом.

setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE)

https://developer.android.com/training/system-ui/immersive.html

Из моих усилий кажется, что: setSystemUiVisibility (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) не работает на планшетах.

Он работает на смартфонах (протестировано с Nexus 4 Mako), но он появится снова при нажатии / нажатии. Это также, кажется, захватывает фокус на полосу, заставляя вас дважды щелкнуть, чтобы восстановить фокус на виде.

Я пытался найти способ отловить событие, которое на самом деле снова отображает панель. Не повезло.

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

Я видел, как приложения это делают (игры и тому подобное), поэтому есть способ без рута.

1 голос
/ 22 сентября 2012

Чтобы скрыть строку состояния и панель навигации в Android ics используйте

LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
0 голосов
/ 24 февраля 2015

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

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

См. Следующее: Скрытие панели навигации

0 голосов
/ 17 сентября 2014

может быть, это кнопка поведения, вы можете посмотреть в моем ответе здесь

у вас все еще есть панель, но вы не можете выйти из приложения без перезагрузки планшета

0 голосов
/ 10 июля 2013

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

Установите пароль и заблокируйте устройство, используя профиль администратора устройства api Затем загрузите все интерфейсы в верхней части экрана блокировки.(Конечно, при каждом переходе между действиями будет отображаться экран блокировки фона. Но если логика организована хорошо, то она будет гладкой и менее заметной для пользователя)"" с помощью resetPassword ("", 0) объекта диспетчера политики устройств.
...