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()
;
8 réponses
Extraits:
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
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()
.
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).
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 ..
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);
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?
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... :)
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);