How to change the color of the status bar in Android?
add the status bar color to your style and done
<item name="android:statusBarColor">@color/black</item>
this is for API level 21+
You can change it by setting the android:statusBarColor
or android:colorPrimaryDark
attribute of the style you're using for your app in styles.xml.
(android:statusBarColor
inherits the value of android:colorPrimaryDark
by default)
For example (since we're using an AppCompat theme here, the android
namespace is omitted):
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimaryDark">@color/your_custom_color</item>
</style>
On API level 21+ you can also use the Window.setStatusBarColor()
method from code.
From its docs:
For this to take effect, the window must be drawing the system bar backgrounds with
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
andWindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
must not be set. If color is not opaque, consider settingView.SYSTEM_UI_FLAG_LAYOUT_STABLE
andView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.
To set these flags you could do something like this:
// getWindow() is a method of Activity
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
You can also add these lines of code in the main activity
if (Build.VERSION.SDK_INT >= 21)
{
getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.statusbar)); //status bar or the time bar at the top (see example image1)
getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dark_nav)); // Navigation bar the soft bottom of some phones like nexus and some Samsung note series (see example image2)
}
example image1 setStatusBarColor
example image2 setNavigationBarColor
The status bar is a system window owned by the operating system.
On pre-5.0 Android devices, applications do not have permission to alter its color, so this is not something that the AppCompat
library can support for older platform versions. The best AppCompat
can do is provide support for coloring the ActionBar
and other common UI widgets within the application.
On post-5.0 Android devices,
Changing the color of status bar also requires setting two additional flags on the Window; you need to add the FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
flag and clear the FLAG_TRANSLUCENT_STATUS
flag.
Window window = activity.getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color
window.setStatusBarColor(activity.getResources().getColor(R.color.my_statusbar_color));