SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 和 FLAG_TRANSLUCENT_STATUS 已弃用

Web*_*ces 4 android kotlin

此代码在 API 30 中已弃用。知道如何更新此代码吗?

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
      }
}
Run Code Online (Sandbox Code Playgroud)

FLAG_TRANSLUCENT_STATUS此处也已弃用。我需要帮助修复此警告。

    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)
            }
Run Code Online (Sandbox Code Playgroud)

Fai*_*han 9

这些解决方案仅适用于 API > 23。

更新:

正如评论部分所建议的,您可以按如下方式使用WindowInsetsControllerCompat

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);
}
Run Code Online (Sandbox Code Playgroud)

旧答案:

在 API 级别 30 setSystemUiVisibility()已被弃用。因此你应该使用WindowInsetsController。下面的代码将使状态栏亮起,这意味着状态栏中的文本将为黑色。

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);
Run Code Online (Sandbox Code Playgroud)

要清除这一点,请使用

wic.setSystemBarsAppearance(0, APPEARANCE_LIGHT_STATUS_BARS);
Run Code Online (Sandbox Code Playgroud)

  • 现在这个答案也已经过时了,因为应该使用“WindowInsetsControllerCompat(window, window.decorView)”和“wic.isAppearanceLightStatusBars”。 (2认同)

小智 0

是的,现在由于它已被弃用,您可以使用:

window.setDecorFitsSystemWindows(false)
Run Code Online (Sandbox Code Playgroud)

然后确保通过将以下样式添加到应用程序主题来使状态栏透明

<item name="android:navigationBarColor">@android:color/transparent</item>
Run Code Online (Sandbox Code Playgroud)