Android: How to set status bar and navigation bar semi transparent
11,167
Solution 1
You can use this two method:
getWindow().setStatusBarColor(Color.parseColor("#20111111"));
getWindow().setNavigationBarColor(Color.parseColor("#20111111"));
Solution 2
There is a bit more to it than just setting the navigation bar color and the statusbar color, you have to actually have your content appear underneath both.
I use the following method in my utils class to set it in the activity before setContentView
public static void setWindowStatusNav(android.view.Window window, int statusbarColor, int navbarColor) {
int flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT_WATCH) {
window.getAttributes().flags |= flags;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
window.getDecorView().setSystemUiVisibility(uiVisibility);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.getAttributes().flags &= ~flags;
window.setStatusBarColor(statusbarColor);
window.setNavigationBarColor(navbarColor);
}
}
Use it in your activity:
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
setContentView(R.layout.my_activity);
}
}
To hide the navigation and status bars, call this method:
public static void setWindowStatusNavHidden(android.view.Window window) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int uiVisibility = window.getDecorView().getSystemUiVisibility();
uiVisibility |= View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
window.getDecorView().setSystemUiVisibility(uiVisibility);
}
}
Usage complete:
public class MyActivity extends AppCompatActivity {
static boolean statusNavVisible = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int statusBarColor = android.graphics.Color.parseColor("#40FF0000");
int navBarColor = android.graphics.Color.parseColor("#6E00FF00");
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
setContentView(R.layout.my_activity);
Button btnShowHide = findViewById(R.id.my_button);
btnShowHide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (statusNavVisible) {
statusNavVisible = false;
MyUtils.setWindowStatusNavHidden(getWindow());
} else {
statusNavVisible = true;
MyUtils.setWindowStatusNav(getWindow(), statusBarColor, navBarColor);
}
}
});
}
}
Comments
-
Lord Goderick almost 2 years
In some applications I noticed that the status bar and navigational bar are transparent however, not completely. I do not know if this is a background color or something else. Would someone tell me how to implement this? Thank you.
-
Lord Goderick over 7 yearsThanks, do you know the exact color Google uses?
-
ak sacha over 7 yearsi dont know exact color but Color.parseColor("#20111111") this will help you.
-
Lord Goderick over 7 yearsThanks, this is very close.
-
ak sacha over 7 yearsHappy Coding :)
-
Choletski about 5 yearsI'm getting opaque color