set windowlightstatusbar property programmatically

As you know we can set the windowLightStatusBar from xml by following codes.

<item name="android:windowLightStatusBar">true</item>

i need to change this attribute true to false or false to true by programmatically. Is there a way to achive it?

8 Answers

set this if you want to change icons colors

.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_‌​BAR);

and to reset to default set this

.setSystemUiVisibility(0);

but if you want to change background color of statusBar use this

getWindow.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

[Update for API 26]

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.insetsController?.setSystemBarsAppearance(WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS)
} else { @Suppress("DEPRECATION") window.decorView.systemUiVisibility = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR } else { View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR }
}

and to clear it

window.insetsController?.setSystemBarsAppearance(0, APPEARANCE_LIGHT_STATUS_BARS)
6

I believe this is the correct way to turn on and turn off.

if (on) { View view = getWindow().getDecorView(); view.setSystemUiVisibility(view.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else { View view = getWindow().getDecorView(); view.setSystemUiVisibility(view.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
1

To clear this attribute, use this code:

window.clearFlags( View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)

Hidro's answer is almost correct, but WindowInsetsControllerCompat needs to be called as a function to work, otherwise it claims there is an unresolved reference in my case.

For Kotlin:

WindowInsetsControllerCompat(window, yourView).isAppearanceLightStatusBars = true

For Java:

WindowInsetsControllerCompat(getWindow(), yourView).setAppearanceLightStatusBars(true)
4
implementation "androidx.core:core-ktx:1.6.0"

Activity

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = true }
}

Tested on Android 8 and Android 12. Work well

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getWindow().setStatusBarColor(Color.WHITE);

Since View.setSystemUiVisibility() is deprecated from API 30 in favor of the new WindowInsetsController API, the 2021 answer to this one is now WindowInsetsControllerCompat#setAppearanceLightStatusBars(boolean), which is backward compatible to API 23. Required androidx.core:core:1.5.0-alpha05 or later.

WindowInsetsControllerCompat.setAppearanceLightStatusBars(true)
3

Only do this
it make icon color white

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like