Постоянно скрывать панель навигации в действии

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

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

Я нашел этот код и немного его адаптировал. Проблема в том, что даже когда я скрываю панель навигации, там остается черное пространство. Я предполагаю, что система вычисляет размер экрана с учетом панели навигации?

public static class Content extends ImageView implements View.OnSystemUiVisibilityChangeListener, View.OnClickListener, ActionBar.OnMenuVisibilityListener { Activity mActivity; TextView mTitleView; Button mPlayButton; SeekBar mSeekView; boolean mAddedMenuListener; boolean mMenusOpen; boolean mPaused; boolean mNavVisible; int mLastSystemUiVis; Runnable mNavHider = new Runnable() { @Override public void run() { setNavVisibility(false); } }; public Content(Context context, AttributeSet attrs) { super(context, attrs); setOnSystemUiVisibilityChangeListener(this); setOnClickListener(this); } public void init(Activity activity, TextView title, Button playButton, SeekBar seek) { // This called by the containing activity to supply the surrounding // state of the video player that it will interact with. mActivity = activity; mTitleView = title; mPlayButton = playButton; mSeekView = seek; mPlayButton.setOnClickListener(this); setPlayPaused(true); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (mActivity != null) { mAddedMenuListener = true; mActivity.getActionBar().addOnMenuVisibilityListener(this); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mAddedMenuListener) { mActivity.getActionBar().removeOnMenuVisibilityListener(this); } } @Override public void onSystemUiVisibilityChange(int visibility) { // Detect when we go out of nav-hidden mode, to clear our state // back to having the full UI chrome up. Only do this when // the state is changing and nav is no longer hidden. int diff = mLastSystemUiVis ^ visibility; mLastSystemUiVis = visibility; if ((diff&SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0 && (visibility&SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) { setNavVisibility(true); } } @Override protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); // When we become visible or invisible, play is paused. setPlayPaused(true); } @Override public void onClick(View v) { if (v == mPlayButton) { // Clicking on the play/pause button toggles its state. setPlayPaused(!mPaused); } else { // Clicking elsewhere makes the navigation visible. setNavVisibility(true); } } @Override public void onMenuVisibilityChanged(boolean isVisible) { mMenusOpen = isVisible; setNavVisibility(true); } void setPlayPaused(boolean paused) { mPaused = paused; mPlayButton.setText(paused ? R.string.play : R.string.pause); setKeepScreenOn(!paused); setNavVisibility(true); } void setNavVisibility(boolean visible) { int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | SYSTEM_UI_FLAG_LAYOUT_STABLE; if (!visible) { newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION; } // If we are now visible, schedule a timer for us to go invisible. if (visible) { Handler h = getHandler(); if (h != null) { h.removeCallbacks(mNavHider); if (!mMenusOpen && !mPaused) { // If the menus are open or play is paused, we will not auto-hide. h.postDelayed(mNavHider, 1500); } } } // Set the new desired visibility. setSystemUiVisibility(newVis); mTitleView.setVisibility(visible ? VISIBLE : INVISIBLE); mPlayButton.setVisibility(visible ? VISIBLE : INVISIBLE); mSeekView.setVisibility(visible ? VISIBLE : INVISIBLE); } } 

Solutions Collecting From Web of "Постоянно скрывать панель навигации в действии"

AFAIK, это невозможно без доступа root. Было бы проблемой безопасности иметь приложение, которое не может быть выведено с помощью кнопок системы.

Изменить, см. Здесь: Скрыть системную панель в планшетах

Существует решение, начиная с KitKat (4.4.2), называемого Immersive Mode: https://developer.android.com/training/system-ui/immersive.html

В принципе, вы должны добавить этот код к вашему методу onResume ():

 View decorView = getWindow().getDecorView(); decorView.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_IMMERSIVE_STICKY); 

Ты можешь

Есть два способа:

1- запустите свое устройство, затем откройте устройство в adb window command , а затем запустите следующее:

  adb shell > su > pm disable com.android.systemui > 

И, чтобы вернуть его, нужно сделать то же самое, но disable изменение.

2- добавьте следующую строку в конец файла build.prop вашего устройства:

 qemu.hw.mainkeys = 1 

То, чтобы вернуть его, просто удалите его.

И если вы не знаете, как редактировать файл build.prop :

  • Загрузите EsExplorer на свое устройство и выполните поиск build.prop, затем измените его права на чтение и запись, наконец, добавьте строку.
  • Загрузите специализированное приложение редактора build.prop, например build.propEditor .
  • Или ссылаться на эту ссылку .

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

  public void FullScreencall() { if(Build.VERSION.SDK_INT < 19){ View v = this.getWindow().getDecorView(); v.setSystemUiVisibility(View.GONE); } else { //for higher api versions. View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; decorView.setSystemUiVisibility(uiOptions); } } 

Это скроет целую панель наложения. Надеюсь, это поможет вам

Измените тему в манифесте.

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

 <activity android:name="Activity Name" android:theme="@android:style/Theme.Black.NoTitleBar" android:label="@string/app_name" > 

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

 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar" > 

Начните с скрытия в OnResume () активности, а затем продолжайте скрываться, как показано ниже:

 decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { // Note that system bars will only be "visible" if none of the // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set. if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { //visible hideSystemUI(); } } } });` public void hideSystemUI() { // Set the IMMERSIVE flag. // Set the content to appear under the system bars so that the content // doesn't resize when the system bars hide and show. decorView.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 // hide nav bar | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE); } 

После просмотра видео DevBytes (Роман Нурик) и прочтения последней строки в документах, в которой говорится:

Примечание. Если вам нравится автоматическое скрытие поведения IMMERSIVE_STICKY, но вам нужно также показать свои собственные элементы управления пользовательским интерфейсом, просто используйте IMMERSIVE в сочетании с Handler.postDelayed () или что-то похожее на повторный вход в режим immersive через несколько секунд.

Ответ, radu122 дал, работал на меня. Просто настройте обработчик, и вам будет хорошо идти.

Вот код, который работает для меня:

 @Override protected void onResume() { super.onResume(); executeDelayed(); } private void executeDelayed() { Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // execute after 500ms hideNavBar(); } }, 500); } private void hideNavBar() { if (Build.VERSION.SDK_INT >= 19) { View v = getWindow().getDecorView(); v.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_IMMERSIVE_STICKY); } } 

Google говорит «через несколько секунд», но я хочу как можно скорее предоставить эту функцию. Возможно, я изменю значение позже, если потребуется, я обновлю этот ответ.

Из документации Google:

Вы можете скрыть панель навигации на 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); 

http://developer.android.com/training/system-ui/navigation.html

Мое решение, чтобы скрыть панель навигации, это:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final View decorView = getWindow().getDecorView(); decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } } }); } @Override protected void onResume() { super.onResume(); final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; final View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(uiOptions); }