Immersive status bar for Android
In the previous article, we implemented the color-changing status bar for Android, and introduced the differences between the immersive Status Bar and the transparent status bar. In this article, we implemented the immersive status bar.
The source of the immersive status bar is that many mobile phones use solid buttons without virtual keys. When the immersive mode is enabled, the status bar disappears. So the immersion mode becomes the immersive status bar.
Let's take a look at the specific effect.
After the immersion mode is enabled, the status bar disappears and slides down from the top. The status bar appears and exits the immersion mode. The status bar also appears. <喎?http: www.bkjia.com kf ware vc " target="_blank" class="keylink"> Vcd4ncjxwps7sw8e1xlt6wu7 + dPax7DSu8aqzsTVwqGjytfPyMrHwb249r + qxvSzwb3 + placement = "brush: java;"> @SuppressLint(NewApi)public static void hideSystemUI(View view) { view.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);}@SuppressLint(NewApi)public static void showSystemUI(View view) { view.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}
These codes can be found in google's developer documentation. You can refer to Using Immersive Full-Screen Mode. The above Code takes effect only in Android 4.4, determine the compatibility of the corresponding Android version.
In addition, an auxiliary function is required to obtain the height of the status bar, which is obtained through reflection.
/*** Get the status bar height ** @ param context Context * @ return notice Bar Height */public int getStatusBarHeight (context) {int statusBarHeight = 0; try {Class
Clazz = Class. forName (com. android. internal. r$ dimen); Object obj = clazz. newInstance (); Field field = clazz. getField (status_bar_height); int temp = Integer. parseInt (field. get (obj ). toString (); statusBarHeight = context. getResources (). getDimensionPixelSize (temp);} catch (Exception e) {e. printStackTrace ();} return statusBarHeight ;}
Click the hide button to enter the immersion mode, that is, to hide the status bar. while hiding the status bar, we need to modify the top and bottom margins of the Toolbar. Otherwise, it will become ugly. Here we register a listener OnSystemUiVisibilityChangeListener, when we enter the immersion mode, we change the top margin of the Toolbar.
hide.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View view = getWindow().getDecorView(); hideSystemUI(view); mToolbar.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { mToolbar.setPadding(mToolbar.getPaddingLeft(), 0,mToolbar.getPaddingRight(), mToolbar.getPaddingBottom()); } }); }});
After entering the immersive mode, move your finger down from the top of the screen, and the status bar appears. It will automatically disappear in about 2 seconds.
Click show to exit the immersion mode. The padding of the Toolbar must also be increased to the height of the status bar.
show.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View view = getWindow().getDecorView(); showSystemUI(view); mToolbar.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { mToolbar.setPadding(mToolbar.getPaddingLeft(), getStatusBarHeight(MainActivity.this),mToolbar.getPaddingRight(), mToolbar.getPaddingBottom()); } }); }});
For more information, see the preceding section.
If you use the SystemBarTintManager class to color the status bar, in addition to the above operations, you also need to add the function of disabling and starting the status bar coloring in the corresponding listener.
Enter immersion mode. Disable
tintManager.setStatusBarTintEnabled(false);
Exit immersion mode. Start
tintManager.setStatusBarTintEnabled(true);
If you want to make the animation smoother, you can add an animation for the padding.
Remember to judge the Android version before using the immersive mode. SYSTEM_UI_FLAG_IMMERSIVE_STICKY can be used only when the value is greater than or equal to API Level 19. You must be compatible with earlier versions and use the immersive mode. Before using SYSTEM_UI_FLAG_IMMERSIVE_STICKY, use android. OS. Build. VERSION. SDK_INT to determine whether the current system VERSION is android4.4 or above. If yes, enable the Code. If not, skip and do not execute.