web-dev-qa-db-fra.com

Comment masquer la barre de navigation de manière permanente dans Android activité?

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

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

Il cache la barre mais lorsque l'utilisateur touche l'écran, il réapparaît. existe-t-il un moyen de le masquer de manière permanente jusqu'à l'activité onStop();

63
Sujith Manjavana

Extraits:

FullScreenFragment.Java

HideNavigationBarComponent.Java


Ceci est pour Android 4.4 +

Essayez le mode immersif https://developer.Android.com/training/system-ui/immersive.html

Extrait de code rapide (pour une classe Activity ):

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 rencontrez des problèmes lorsque vous appuyez sur Volume haut ou Volume bas, cela est indiqué dans la barre de navigation. J'ai ajouté du code dans onCreate voir setOnSystemUiVisibilityChangeListener

Voici une autre question connexe:

La navigation en mode immersif devient collante après avoir appuyé sur le volume ou avec une réduction de restauration

95
Dawid Drozd

Fais ça.

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 de même pour les versions d'API inférieures, même si c'est une réponse tardive, j'espère que cela aidera quelqu'un d'autre.

Si vous voulez que cela soit permanent, appelez simplement FullscreenCall() dans votre méthode onResume().

48
Evish Verma

Utilisation:-

view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Dans les tablettes fonctionnant sous Android 4+, il n’est pas possible de masquer la barre système/de navigation.

De documentation :

SYSTEM_UI_FLAG_HIDE_NAVIGATION est un nouvel indicateur qui demande à la barre de navigation de se masquer complètement. Sachez que cela ne fonctionne que pour la barre de navigation utilisée par certains combinés (cela ne masque pas la barre système sur les tablettes).

3
Namrata

Selon site développeur Android

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

Cependant, vous pouvez faire un tour. C'est un truc, pense-toi.

Juste quand le navigation bar s'affiche lorsque l'utilisateur touche l'écran. Immédiatement le cacher à nouveau. C'est marrant.

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 à ce sujet ..

Masquer la barre système dans les tablettes

3
Sandeep R

C'est un problème de sécurité: https://stackoverflow.com/a/12605313/1303691

par conséquent, il n'est pas possible de masquer la navigation sur une tablette de manière permanente avec un seul appel au début de la création de la vue. Il sera caché, mais il apparaîtra lorsque vous toucherez l’écran. Donc, juste la deuxième pression sur votre écran peut provoquer un onClickEvent sur votre mise en page. Par conséquent, vous devez intercepter cet appel, mais je ne l'ai pas encore géré. Je mettrai à jour ma réponse lorsque je l'aurai trouvé. Ou avez-vous déjà la réponse?

1
swisscoder

Je pense que le code de coup vous aidera, et ajoutez ce code avant setContentView ()

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

Ajoutez ces codes derrière la commande setContentView () getWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE);

1
qingfei song

Vous trouverez ici beaucoup de détails utiles et spécifiques: Activer le mode plein écran

Ceci est un lien officiel Google/Android, alors merci de ne pas me critiquer pour "coller un lien sans répondre à la question".

0
Chris Sprague

Essaye ça.

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

dis moi si ça aide... :)

0
Rashad

C'est ma solution:

Commencez par définir un booléen indiquant si la barre de navigation est visible ou non.

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

Deuxième méthode create qui masque 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 avoir masqué la barre de navigation, celle-ci sera visible. Nous avons donc son état si visible nous le cachons.

Maintenant, définissez OnClickListener sur votre vue. J'utilise un surfaceview donc pour moi:

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

De plus, nous devons appeler cette méthode lorsque l'activité est lancée. Parce que nous voulons le cacher au début.

        setNavigationBarVisibility(navigationBarVisibility);
0
PeerNet