Подтвердить что ты не робот

Как скрыть навигационную панель постоянно в андроид-активности?

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

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

Он скрывает панель, но когда пользователь касается экрана, он снова отображается. есть ли способ скрыть это навсегда до активности onStop();

4b9b3361

Ответ 1

Отрывки:

FullScreenFragment.java

HideNavigationBarComponent.java


Это для Android 4.4 +

Попробуйте режим погружения https://developer.android.com/training/system-ui/immersive.html

Быстрый фрагмент (для класса Деятельность):

private int currentApiVersion;

@Override
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    currentApiVersion = android.os.Build.VERSION.SDK_INT;

    final int flags = 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;

    // This work only for android 4.4+
    if(currentApiVersion >= Build.VERSION_CODES.KITKAT)
    {

        getWindow().getDecorView().setSystemUiVisibility(flags);

        // Code below is to handle presses of Volume up or Volume down.
        // Without this, after pressing volume buttons, the navigation bar will
        // show up and won't hide
        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(flags);
                    }
                }
            });
    }

}


@SuppressLint("NewApi")
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);
    if(currentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus)
    {
        getWindow().getDecorView().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);
    }
}

Если у вас возникли проблемы, когда вы нажимаете Громкость или Громкость, которые отображаются на панели навигации. Я добавил код в onCreate см. setOnSystemUiVisibilityChangeListener

Вот еще один связанный с этим вопрос:

Навигация в режиме погружения становится липким после нажатия на тома или минимизации-восстановления

Ответ 2

Сделай это.

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

Это работает на 100%, и вы можете сделать то же самое для более низких версий API, даже если ответ будет запоздалым, надеюсь, это поможет кому-то еще.

Если вы хотите, чтобы это было постоянным, просто вызовите FullscreenCall() внутри вашего метода onResume().

Ответ 3

Согласно сайт разработчика Android

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

Однако вы можете сделать один трюк. Его трюк вам нравится.

Только когда отображается navigation bar, когда пользователь коснется экрана. Сразу же спрячьте это снова. Его удовольствие.

Проверьте.

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

См. это для получения дополнительной информации об этом.

Скрыть системную панель в планшетах

Ответ 4

Использование: -

view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

В планшетах с Android 4+ невозможно скрыть панель "Система/Навигация".

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

SYSTEM_UI_FLAG_HIDE_NAVIGATION - это новый флаг, который запрашивает навигационная панель полностью скрывается. Имейте в виду, что это работает только для панель навигации, используемая некоторыми мобильными телефонами (она не скрывает системную панель на планшетах).

Ответ 5

Проблема с безопасностью: fooobar.com/questions/57557/...

поэтому его невозможно скрыть Навигация на планшете навсегда с помощью одного вызова в начале создания представления. Он будет скрыт, но он появится при касании экрана. Таким образом, только второе касание к экрану может вызвать onClickEvent на вашем макете. Поэтому вам нужно перехватить этот вызов, но я еще не справился с этим, я обновлю свой ответ, когда узнаю его. Или вы уже ответили?

Ответ 6

Я думаю, что код удара поможет вам и добавит этот код перед установкой setContentView()

getWindow().setFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

Добавьте этот код за setContentView(). GetWindow() getDecorView() setSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE);.

Ответ 7

Это мое решение:

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

boolean navigationBarVisibility = true //because it visible when activity is created

Второй метод создания, который скрывает панель навигации.

private void setNavigationBarVisibility(boolean visibility){
    if(visibility){
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
        navigationBarVisibility = false;
    }

    else
        navigationBarVisibility = true;
}

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

Теперь установите OnClickListener в ваше представление. Я использую для себя такое представление:

    playerSurface.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setNavigationBarVisibility(navigationBarVisibility);
        }
    });

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

        setNavigationBarVisibility(navigationBarVisibility);

Ответ 8

Попробуйте это:

View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

Ответ 9

Для людей, которые ищут более простое решение, я думаю, что вы можете просто написать эту строку кода в onStart()

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

Это называется режим погружения. Вы можете посмотреть на официальную документацию для других возможностей.