Скрыть кнопки переключателя задач ICS назад домой

Просто интересно, как программно скрыть программные кнопки ICS back/home/etc. Так же, как приложения Youtube при воспроизведении видео. Я хочу скрыть их во время воспроизведения видео, но вызвать их, если пользователь коснется экрана.

Кажется, я не могу найти его нигде в Интернете или в документации Google.


person rustyshelf    schedule 12.12.2011    source источник


Ответы (6)


попробуйте настроить полноэкранное окно с флагом SYSTEM_UI_FLAG_HIDE_NAVIGATION

person pinxue    schedule 12.12.2011
comment
Нужно ли вызывать это в корневом представлении? - person Talha; 08.11.2016

pinxue точен... вам нужен SYSTEM_UI_FLAG_HIDE_NAVIGATION. Пример:

myView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Однако стоит отметить, что при любом (и я имею в виду ЛЮБОМ) взаимодействии с пользователем панель навигации будет отображаться повторно.

С Honeycomb самое близкое, что вы можете получить, - это перейти в режим «выключения света» (теперь он называется «низкий профиль»... SYSTEM_UI_FLAG_LOW_PROFILE ). Это просто делает элементы на панели навигации менее заметными (маленькие «точки», которые вы, вероятно, видели). Если вы хотите сделать все возможное, чтобы поддерживать обратную совместимость с Honeycomb, вы можете использовать отражение, чтобы использовать «лучший» метод:

// Ask the System Bar to hide
int whichHiddenStatusToUse = android.view.View.STATUS_BAR_HIDDEN;
try {
    // if this next line doesn't thrown an exception then we are on ICS or  
    // above, so we can use the new field.
    whichHiddenStatusToUse = View.class.getDeclaredField("SYSTEM_UI_FLAG_HIDE_NAVIGATION").getInt(mDrawingSurface);
} catch (Exception ex) {
}
// now lets actually ask one of our views to request the decreased visibility
myView.setSystemUiVisibility(whichHiddenStatusToUse);
person Jeremy Logan    schedule 03.01.2012
comment
Ответ отличный. Тем не менее, я бы старался избегать размышлений, когда это возможно. Потому что некрасиво - как обычно. Я бы просто проверил текущую версию платформы и использовал одну из констант. Например. if (Build.VERSION.SDK_INT ›= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {...} - person Zsolt Safrany; 21.08.2013
comment
Где взять mDrawingSurface? - person Nik; 04.02.2014

Вам нужен SYSTEM_UI_FLAG_HIDE_NAVIGATION .

Этот флаг был добавлен в Ice Cream Sandwich, API 14. До 14 флаг STATUS_BAR_HIDDEN был добавлен в Honeycomb, API 11. До этого программных кнопок навигации не существовало, поэтому полноэкранные режимы полностью обрабатывались Темы (в частности, Theme.NoTitleBar.Fullscreen ).

Использовать:

if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH )
    mBaseLayout.setSystemUiVisibility( View.SYSTEM_UI_FLAG_HIDE_NAVIGATION );
else if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB )
    mBaseLayout.setSystemUiVisibility( View.STATUS_BAR_HIDDEN );
person reor    schedule 11.11.2013

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

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

Ничто из вышеперечисленного не помогло мне.

Я написал класс после нескольких дней гугления этой темы давным-давно. Я заканчиваю этот класс.

UtilsTaskBar.java

Я не смог протестировать его везде, но он работает на 4.**

ПРИМЕЧАНИЕ. Я использовал этот класс для приложений специального назначения, которые не предназначены для обычных пользователей.

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

Поэтому используйте его только в том случае, если он вам действительно нужен.

person MBH    schedule 27.01.2016
comment
@yshahak для запуска этих функций требуется разрешение root, и я не тестировал его на API23 или выше, спасибо за информацию. - person MBH; 08.12.2016
comment
Ну, вы ничего не упомянули о рутировании... Тогда это другая история. - person yshahak; 08.12.2016

в AndroidManifest.xml добавьте это:

<uses-permission android:name="android.permission.BROADCAST_STICKY"/>

затем вы можете использовать эту функцию, чтобы показать и скрыть панель навигации домой/возврат

private void changeSystemBarVisibilty(boolean show)
{
    Context context = getApplicationContext();
    final Intent intent = new Intent("android.intent.action.SYSTEM_BAR_VISIBILITY");
    intent.putExtra("show", show);
    context.sendStickyBroadcast(intent);
}
person Elad    schedule 22.09.2016

Когда об этом говорят в приложениях, это называется «Режим отключения света». Я не смог найти ничего, связанного с ICS, но вот ссылка на обсуждение Honeycomb.

где вызов API для режима отключения света в соты

person NKijak    schedule 12.12.2011
comment
Это просто превращает их в маленькие точки, а не скрывает их (как вышеупомянутое приложение YouTube). - person Jeremy Logan; 03.01.2012