web-dev-qa-db-fra.com

Est-il possible de cacher le système/barre de navigation dans Android ICS

J'aimerais prolonger la discussion sur le masquage de la barre système/de navigation au bas de l'écran sur les tablettes Android Ice Cream Sandwich (4.0 et versions supérieures).

Il existe déjà un fil ( Y a-t-il un moyen de masquer la barre système d'Android 3.0? C'est un périphérique interne et je gère la navigation ) pour masquer la barre des appareils Honeycomb. Toutefois, mes clients utiliseront les tout derniers appareils pour sandwichs à la crème glacée et tiennent à cacher la barre au bas de l'écran. Leur application n’est pas destinée à un usage courant par les consommateurs et il est très important qu’ils occupent l’ensemble de l’écran pour offrir leur expérience. Dans quelle mesure est-il possible de masquer cette barre - ou du moins d’annuler le comportement de tous les boutons - sans enraciner les périphériques ni réécrire son micrologiciel?

20
Rob Szumlakowski

Check out SYSTEM_UI_FLAG_HIDE_NAVIGATION , cet indicateur masque la barre de navigation jusqu'à ce que l'utilisateur interagisse avec le périphérique. Il a été introduit dans Android 4.0. Vous pouvez activer cet indicateur par exemple comme ceci:

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

Notez que la navigation ne disparaîtra plus automatiquement, vous devez la configurer à chaque fois que l'utilisateur interagit avec l'appareil. 

Vous pouvez également rendre la navigation moins intrusive en utilisant SYSTEM_UI_FLAG_LOW_PROFILE , les boutons sont alors transformés en petits points (par exemple, comme dans l'application pour appareil photo)

24
user658042

sur les appareils enracinés, j'utilise la commande adb suivante

adb Shell pm disable com.Android.systemui

masquer la barre de navigation de façon permanente. Pour le montrer à nouveau, lancez

adb Shell pm enable com.Android.systemui

jusqu'ici ça marche bien pour moi

12
Nartus Team

Utiliser le code ci-dessous est un moyen de le faire pour masquer la navigation

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

Mais le problème avec ce qui précède est qu’il devient visible dès que l’utilisateur touche l’écran.

Dans Android KitKat, il existe une fonctionnalité appelée IMMERSIVE qui masque la barre de notification et la navigation. Il ne s'affiche pas même si l'utilisateur interagit avec l'écran. Cependant, l'utilisateur peut le rendre visible en le faisant glisser du haut vers le bas de l'écran. Ci-dessous le code pour y parvenir

//Initializew this in onCreate()
View mDecorView = getWindow().getDecorView();

//Then call this function
private void hideSystemUI() {
     mDecorView.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_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

Cependant, dans mon cas, je n'ai jamais voulu que la barre de navigation et de notification soit visible, même si l'utilisateur glisse du haut vers le bas de l'écran. J'ai essayé et j'ai réussi à le réaliser partiellement. Ce que j'ai fait, c'est que j'ai implémenté une CountDownTimer qui appellerait hideSystemUI() toutes les secondes environ. Je sais que ce n'est pas la meilleure façon de le faire. Mais je n'ai pas eu d'autre solution pour le faire.

Si quelqu'un en a, merci de me dire comment masquer de manière permanente la barre de navigation et de notification :) J'espère que cette réponse aidera quelqu'un à l'avenir :)

Regardez this video pour mieux comprendre cette fonctionnalité. 

4
ik024

Mise à jour - il existe une solution de contournement qui peut être utilisée pour de tels cas (configuration manuelle de l'application pour le client). En effet, la barre de navigation ne peut pas être supprimée dans le cadre donné. 

Cependant, il existe une solution pour masquer la barre de navigation si l’enracinement du périphérique est une option pour vous. Voici comment:

Périphérique racine

Installer et exécuter Busybox

Installer HideBar

Dans HideBar, il existe une option pour exécuter en mode «Kiosque», dans lequel il n'y a aucun moyen de ré-afficher la barre de navigation. Inutile de dire que vous devez vraiment faire attention à cela.

Risques impliqués: 

  • bricking l'appareil

  • obtenir une mauvaise installation de BusyBox, ce qui pourrait rendre les choses un peu délicates, bien qu'il soit très peu probable que cela entraîne une perte d'informations. 

  • entrer dans une impasse où vous ne pouvez pas quitter votre application. Par exemple, si votre interface graphique ne fournit pas d’option de fermeture, votre application démarre automatiquement au démarrage, 3 HideBar ne permet aucun moyen de réafficher la barre de navigation et 4 HideBar masque la barre de navigation au démarrage. ceci peut être surmonté en arrêtant/désinstallant simplement votre application d'adb.

Voici d'autres questions identiques:

3
ılǝ

Bien que ce soit une solution simpliste, je pense qu’elle mérite l’attention, car elle ne nécessite pas d’enracinement du périphérique: getWindow().getDecorView().setSystemUiVisibility(8);.

2
Bianca D.

Pour masquer la barre d’état et la barre de navigation dans Android ics, utilisez

LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
1
sukumar

EDIT: A partir de la version 4.4 (19), vous pouvez utiliser ce qui suit pour activer ce que l’on appelle le "MODE IMMERSIF". Il a été introduit pour le vrtoolkit Cardboard de Google, mais peut être utilisé de manière générale.

setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE)

https://developer.Android.com/training/system-ui/immersive.html

D'après mes efforts, il semble que: setSystemUiVisibility (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) ne fonctionne pas sur les tablettes.

Cela fonctionne sur les smartphones (testé avec un Nexus 4 Mako), mais il réapparaîtra lors d'un événement tactile/clic. Cela semble également capturer le focus sur la barre, ce qui vous oblige à cliquer deux fois pour rétablir le focus sur la vue.

J'ai essayé de trouver un moyen de piéger l'événement qui réaffiche réellement la barre. Pas de chance.

Etant têtu, je vais télécharger le code Android os, lancer le débogueur Eclipse et lancer le jeu. Ce n'est pas un bug - la barre de navigation est cruciale pour le cycle de vie des applications.

J'ai vu des applications le faire (jeux et autres) donc il y a moyen de s'enraciner.

1
Dominic Cerisano

Vous ne pouvez pas le cacher, sauf si vous avez enraciné l'appareil. Mais bien sûr, il existe une solution de contournement qui pourrait ne pas correspondre à vos besoins, mais plusieurs applications bien connues du marché utilisent actuellement cette stratégie pour obtenir cette fonctionnalité de barre de menus désactivée pour leurs applications.

  • Accorder le privilège administrateur.
  • Définissez le mot de passe et verrouillez le périphérique à l'aide de l'api du profil administrateur du périphérique.
  • Chargez ensuite les interfaces utilisateur en haut de l'écran de verrouillage natif. (Bien sûr, cela affichera l’écran de verrouillage en arrière-plan chaque fois qu’une transition aura lieu entre les activités. Mais si la logique est bien organisée, elle sera fluide et moins remarquée par l’utilisateur)
  • Lorsque la réactivation est nécessaire, réinitialisez le mot de passe sur "" à l'aide de resetPassword ("", 0) de l'objet Gestionnaire de règles de périphérique.
0
M P Mathugama

Vous pouvez masquer la barre de navigation sur Android 4.0 et versions ultérieures à l'aide de l'indicateur SYSTEM_UI_FLAG_HIDE_NAVIGATION. Cet extrait masque à la fois la barre de navigation et la barre d'état:

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions

Voir ce qui suit: Masquage de la barre de navigation

0
dayanruben

placez ce code dans votre balise d'application dans le fichier manifeste pour masquer la barre d'onglets par défaut

<Application
Android:theme="@Android:style/Theme.Black.NoTitleBar.Fullscreen" <!--
other parameters of application tag-->
>

puis faites une mise en page linéaire ou relative et placez-la dans la mise en page de votre activité.

0
Adeel

peut-être que le comportement du bouton est suffisant, vous pouvez consulter ma réponse ici

vous avez toujours le bar mais vous ne pouvez pas quitter l'application sans redémarrer la tablette

0
Philippe T.