This code is deprecated in API 30. Any idea how to update this?
private fun setSystemBarLight(act: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val view: View = act.findViewById(android.R.id.content)
var flags: Int = view.systemUiVisibility
flags = flags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
view.systemUiVisibility = flags
}
}
FLAG_TRANSLUCENT_STATUS is also deprecated here. I need help fixing this warning.
private fun setSystemBarColor(act: Activity, color: String?) {
val window: Window = act.window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.statusBarColor = Color.parseColor(color)
}
These solutions only work on API >= 23.
As suggested in the comment section, you can use WindowInsetsControllerCompat as follows.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Window window = getWindow();
View decorView = window.getDecorView();
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(window, decorView);
wic.setAppearanceLightStatusBars(true); // true or false as desired.
// And then you can set any background color to the status bar.
window.setStatusBarColor(Color.WHITE);
}
OLD ANSWER:
In API level 30 setSystemUiVisibility() has been deprecated. Hence you should use WindowInsetsController. The below code will make the status bar light, that means the text in the statut bar will be black.
Window window = getWindow();
View decorView = window.getDecorView();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
WindowInsetsController wic = decorView.getWindowInsetsController();
wic.setSystemBarsAppearance(APPEARANCE_LIGHT_STATUS_BARS, APPEARANCE_LIGHT_STATUS_BARS);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
// set any light background color to the status bar. e.g. - white or light blue
window.setStatusBarColor(Color.WHITE);
to clear this, use
wic.setSystemBarsAppearance(0, APPEARANCE_LIGHT_STATUS_BARS);
Yes now since it is deprecated, you can use:
window.setDecorFitsSystemWindows(false)
Then make sure you make the status bar transparent as well by adding below style to your app theme
<item name="android:navigationBarColor">@android:color/transparent</item>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With