Toggle Fullscreen mode Toggle Fullscreen mode android android

Toggle Fullscreen mode


private void setFullscreen(boolean fullscreen){    WindowManager.LayoutParams attrs = getWindow().getAttributes();    if (fullscreen)    {        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;    }    else    {        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;    }    getWindow().setAttributes(attrs);}


/** * toggles fullscreen mode * <br/> * REQUIRE: android:configChanges="orientation|screenSize" * <pre> * sample: *     private boolean fullscreen; *     ................ *     Activity activity = (Activity)context; *     toggleFullscreen(activity, !fullscreen); *     fullscreen = !fullscreen; * </pre> */private void toggleFullscreen(Activity activity, boolean fullscreen) {    if (Build.VERSION.SDK_INT >= 11) {        // The UI options currently enabled are represented by a bitfield.        // getSystemUiVisibility() gives us that bitfield.        int uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();        int newUiOptions = uiOptions;        boolean isImmersiveModeEnabled =                ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);        if (isImmersiveModeEnabled) {            Log.i(context.getPackageName(), "Turning immersive mode mode off. ");        } else {            Log.i(context.getPackageName(), "Turning immersive mode mode on.");        }        // Navigation bar hiding:  Backwards compatible to ICS.        if (Build.VERSION.SDK_INT >= 14) {            newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;        }        // Status bar hiding: Backwards compatible to Jellybean        if (Build.VERSION.SDK_INT >= 16) {            newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;        }        // Immersive mode: Backward compatible to KitKat.        // Note that this flag doesn't do anything by itself, it only augments the behavior        // of HIDE_NAVIGATION and FLAG_FULLSCREEN.  For the purposes of this sample        // all three flags are being toggled together.        // Note that there are two immersive mode UI flags, one of which is referred to as "sticky".        // Sticky immersive mode differs in that it makes the navigation and status bars        // semi-transparent, and the UI flag does not get cleared when the user interacts with        // the screen.        if (Build.VERSION.SDK_INT >= 18) {            newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;        }        activity.getWindow().getDecorView().setSystemUiVisibility(newUiOptions);    } else {        // for android pre 11        WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();        if (fullscreen) {            attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;        } else {            attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;        }        activity.getWindow().setAttributes(attrs);    }    try {        // hide actionbar        if (activity instanceof ActionBarActivity) {            if (fullscreen) ((ActionBarActivity) activity).getSupportActionBar().hide();            else ((ActionBarActivity) activity).getSupportActionBar().show();        } else if (Build.VERSION.SDK_INT >= 11) {            if (fullscreen) activity.getActionBar().hide();            else activity.getActionBar().show();        }    } catch (Exception e) {        e.printStackTrace();    }    // set landscape   // if(fullscreen)  activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);   // else activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);}

my code working fine with android 2.3 and 4.4.2


Since Jellybean (4.1) there is a new method that doesn't rely on the WindowManager. Instead use setSystemUiVisibility off of the Window, this gives you more granular control over the system bars than using WindowManager flags. This is how you enable fullscreen:

if (Build.VERSION.SDK_INT < 16) { //ye olde method    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                    WindowManager.LayoutParams.FLAG_FULLSCREEN);} else { // Jellybean and up, new hotness    View decorView = getWindow().getDecorView();    // Hide the status bar.    int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;    decorView.setSystemUiVisibility(uiOptions);    // Remember that you should never show the action bar if the    // status bar is hidden, so hide that too if necessary.    ActionBar actionBar = getActionBar();    actionBar.hide();}

And this is how you revert the above code:

if (Build.VERSION.SDK_INT < 16) { //ye olde method    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);} else { // Jellybean and up, new hotness    View decorView = getWindow().getDecorView();    // Hide the status bar.    int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;    decorView.setSystemUiVisibility(uiOptions);    // Remember that you should never show the action bar if the    // status bar is hidden, so hide that too if necessary.    ActionBar actionBar = getActionBar();    actionBar.show();}