SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 和 FLAG_TRANSLUCENT_STATUS 已弃用

问题描述

代码在 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
      }
}

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)
            }

解决方法

这些解决方案仅适用于 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);
}

旧答案:

在 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);

要清除它,请使用

wic.setSystemBarsAppearance(0,APPEARANCE_LIGHT_STATUS_BARS);
,

现在是的,因为它已被弃用,您可以使用:

window.setDecorFitsSystemWindows(false)

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

<item name="android:navigationBarColor">@android:color/transparent</item>