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()
;
Extraits:
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:
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()
.
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).
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 ..
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?
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);
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".
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... :)
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);