How to hide navigation bar permanently in android activity? How to hide navigation bar permanently in android activity? android android

How to hide navigation bar permanently in android activity?


Snippets:

FullScreenFragment.java

HideNavigationBarComponent.java


This is for Android 4.4+

Try out immersive mode https://developer.android.com/training/system-ui/immersive.html

Fast snippet (for an Activity class):

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")@Overridepublic 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);    }}

If you have problems when you press Volume up or Volume down that your navigation bar show. I added code in onCreate see setOnSystemUiVisibilityChangeListener

Here is another related question:

Immersive mode navigation becomes sticky after volume press or minimise-restore


Do this.

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);    }}

This works 100% and you can do same for lower API versions, even if it's a late answer I hope it will helps someone else.

If you want this to be permanent, just call FullScreencall() inside your onResume() method.


For people looking at a simpler solution, I think you can just have this one line of code in onStart()

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

It's called Immersive mode. You may look at the official documentation for other possibilities.