Question

Je souhaite que mon application soit immersive le cas échéant et imite certaines fonctionnalités lorsque l'API est trop faible.Est-ce une manière appropriée de procéder ?Existe-t-il un moyen plus efficace ?

private boolean apiTooLowForImmersive = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT){

        apiTooLowForImmersive = true;

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
    setContentView(R.layout.activity_menu);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus && !apiTooLowForImmersive ) {
        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
            );}
}
Était-ce utile?

La solution

Non, c'est la meilleure façon de le faire (ou bien, c'est le même système que j'utilise dans mon application)

Juste une note, faites apiTooLowForImmersive static et public

public static boolean apiTooLowForImmersive = false;

et lui donner une valeur dans un static bloc.

static { 
       apiTooLowForImmersive = 
               (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT); 
}

Avec cela, vous pouvez utiliser ce champ dans chaque classe et à chaque fois que vous avez besoin de savoir quel code peut être utilisé en toute sécurité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top