web-dev-qa-db-fra.com

Utilisation du nouveau mode IMMERSIVE dans le kitkat Android

Je souhaite créer une activité pour passer en mode IMMERSIVE et masquer les barres système du haut et du bas dès le début.

Dans le site de développement d'Android, ils disent que je devrais utiliser setSystemUiVisibility() et fournir SYSTEM_UI_FLAG_IMMERSIVE et SYSTEM_UI_FLAG_HIDE_NAVIGATION.

Comment puis-je faire cela dans la méthode OnCreate() de l'activité? Je pense que la setSystemUiVisibility n'est pas fournie dans la classe d'activité et que cela devrait se produire dans une vue. Y at-il un travail autour?

METTRE À JOUR

ok Selon la porte bloquée, j'ai ajouté les lignes suivantes, mais je ne vois aucune modification, les boutons de la barre de navigation et les boutons sont toujours visibles:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
        }
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE);
    }

    //Rest of activity code
20
Saeid Yazdani

Obtenez la vue du décor:

getWindow().getDecorView().setSystemUiVisibility(...)

Rappelez-vous que les arguments sont des indicateurs de bits. Appelez la méthode ci-dessus une seule fois:

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);
44
doorstuck

Chris Banes Gist montre une classe de Nice Helper que nous pouvons utiliser pour définir le mode immersif de toutes les versions de HoneyComb à Lollipop https://Gist.github.com/chrisbanes/73de18faffca571f7292

Mise à jour: J'ai essayé de l'inclure dans mon projet avec son dépôt github, mais je devais cloner les fichiers Gist dans mon projet et y ajouter le nom du paquet. Si quelqu'un sait comment l'inclure correctement en tant que dépendance, n'hésitez pas à m'aider.

Je l'ai ajouté dans mon FullScreenActivity. Je veux utiliser ImmersiveStickyMode comme ceci:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

        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;

        SystemUiHelper uiHelper =  new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags);
        uiHelper.hide();



}
5
swisscoder

Vous pouvez créer une fonction globale pour passer en mode immersif comme:

public static void enableImmersiveMode(final View decorView) {
        decorView.setSystemUiVisibility(setSystemUiVisibility());
        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    decorView.setSystemUiVisibility(setSystemUiVisibility());
                }
            }
        });
    }


public static int setSystemUiVisibility() {
        return 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;
 }

Le code ci-dessus contrôlera également le changement de visibilité de l'interface utilisateur du système. J'espère que ceci vous aidera.

2
Rahul Parihar

Beaucoup plus agréable et le mérite de William J. Francis :

   public class GameActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        /* my code you dont need this
        assets=getAssets();
        sGame= new GameView(this, GAME_WIDTH, GAME_HEIGHT);
        setContentView(sGame);  
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        */


        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 // hide nav bar
                | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }

@Override         
protected void onDoSomethingOtherImportantThing(){
...
}



}
2

La réponse a déjà été donnée mais voici Comment utiliser le mode immersif.

Dans votre activité:

juste avant setContentview () .......

appelez la méthode: toggleHideyBar ();

Suivez la documentation documentation de Developer Android et copiez cette méthode dans votre activité.

0
sud007