Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SYSTEM_UI_FLAG_LIGHT_STATUS_BAR and FLAG_TRANSLUCENT_STATUS is deprecated

Tags:

android

kotlin

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)
            }
like image 445
Web Services Avatar asked Dec 23 '20 11:12

Web Services


2 Answers

These solutions only work on API >= 23.

UPDATE:

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);
like image 183
Faisal Khan Avatar answered Oct 05 '22 15:10

Faisal Khan


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>
like image 30
saeedata Avatar answered Oct 05 '22 14:10

saeedata