Intereting Posts
Как получить текущее местоположение элемента ActionBar MenuItem? Вызов функции Java из JavaScript через Android WebView Отправка файла Bluetooth для Android Ориентация просмотра поверхности андроида CollapsingToolbarLayout setTitle () не обновляется, если не свернут Разница между версиями подписей – V1 (подпись Jar) и V2 (полная подпись APK) при генерации подписанного apk в AndroidStudio? Приложение Android Intent для Twitter Как отменить регистрацию BroadcastReceiver Широковещательный приемник не получит событие камеры Удалить кнопку «Готово» в ActionMode Gradle – выборочная компиляция модуля (в противном случае используется барабан повторного использования) Android Studio: создание ландшафтных макетов Могу ли я автоматически отправлять SMS (без необходимости одобрения пользователем) Почему центр внимания в моей сцене three.js остается в центре внимания камеры, но только в Chrome для Android? Как проверить неограниченный доступ в Интернет? (Обнаружение портативного портала)

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

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

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

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

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); }