Comment cacher la barre de navigation de façon permanente dans l'activité android?

je veux cacher barre de navigation de façon permanente dans mon activité(pas tout le système ui). maintenant j'utilise ce morceau de code

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

il cache la barre mais quand l'utilisateur touche l'écran il montre à nouveau. y a-t-il un moyen de le cacher de façon permanente jusqu'à l'activité onStop() ;

46
demandé sur Gopal Gopi 2014-02-12 13:56:45

8 réponses

Extraits:

FullScreenFragment.java

HideNavigationBarComponent.java


C'est pour Android 4.4+

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

Fast extrait (pour une classe activité ):

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

si vous avez des problèmes lorsque vous appuyez sur le Volume vers le haut ou le Volume vers le bas que votre barre de navigation montrent. J'ai ajouté le code dans onCreate voir setOnSystemUiVisibilityChangeListener

Voici une autre question connexe:

la navigation en mode immersif devient collante après pression de volume ou minimise-restaure

73
répondu Dawid Drozd 2017-05-23 12:34:29

faites ceci.

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

cela fonctionne à 100% et vous pouvez faire la même chose pour les versions inférieures de L'API, même si c'est une réponse tardive, j'espère que cela aidera quelqu'un d'autre.

si vous voulez que ce soit permanent, il suffit d'appeler FullscreenCall() dans votre méthode onResume() .

32
répondu Evish Verma 2018-02-14 22:02:52

utilisation: -

view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

sur les tablettes fonctionnant sous Android 4+, il n'est pas possible de cacher la barre de Navigation Système/.

à Partir de documentation :

le SYSTEM_UI_FLAG_HIDE_NAVIGATION est un nouveau drapeau qui demande le barre de navigation cacher complètement. Être conscient que cela ne fonctionne que pour les barre de navigation utilisée par certains combinés (elle ne cache pas la barre de système sur les tablettes).

3
répondu Namrata 2014-02-12 10:08:33

selon Android Developer site

je pense que vous ne pouvez pas(autant que je sache) cacher la barre de navigation de façon permanente..

Cependant vous pouvez faire un tour. Ses un truc, vous l'esprit.

juste quand le navigation bar apparaît quand l'utilisateur touche l'écran. Immédiatement cacher de nouveau. Son amusement.

Cochez cette case .

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

voir ceci pour plus d'informations sur cette ..

Masquer la Barre Système en Comprimés

3
répondu Sandeep R 2017-05-23 12:26:07

je pense que le code blow vous aidera, et ajoutez ce code avant setContentView ()

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

ajouter le code derrière setContentView() getWindow ().getDecorView ().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

1
répondu qingfei song 2017-06-23 12:18:04

C'est une question de sécurité: https://stackoverflow.com/a/12605313/1303691

donc il n'est pas possible de cacher la Navigation sur une tablette de façon permanente avec un seul appel au début de la création de la vue. Il sera caché, mais il apparaîtra lorsque vous touchez l'Écran. Donc, juste la seconde touche à votre écran peut causer un onClickEvent sur votre mise en page. Par conséquent, vous devez intercepter cet appel, mais je n'ai pas encore réussi, je vais mise à jour de ma réponse quand je l'ai découvert. Ou avez-vous la réponse?

1
répondu swisscoder 2017-11-23 09:35:22

essayez ceci.

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

dites-moi si ça aide... :)

0
répondu Rashad 2014-02-12 10:01:39

C'est ma solution:

d'abord, définissez le booléen qui indique si la barre de navigation est visible ou non.

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

deuxième créer une méthode qui cache la barre de navigation.

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

par défaut, si vous cliquez sur activité après la barre de navigation hide, la barre de navigation sera visible. Donc on a l'état. s'il est visible, on le cachera.

mettez OnClickListener à votre avis. J'utilise une surfaceview donc pour moi:

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

Aussi, nous devons appeler cette méthode lorsque l'activité est lancée. Parce qu'on veut le cacher au début.

        setNavigationBarVisibility(navigationBarVisibility);
0
répondu PeerNet 2017-09-05 06:24:40