关于StatusBar

0x00、 关于 Status bar

我们的需求是什么? 1. 实时修改 StatusBar 颜色 2. 实时修改 StatusBar 位置文字颜色 3. 不显示 StatusBar

0x01、 设置 Status bar 颜色

1.1、 在 API ≥ 21 的设备上

    <style name="AppTheme" >
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <!-- 修改此值即可 -->
        <item name="colorAccent">@color/colorAccent</item>
    </style>

1.2、 在 API < 21 的设备上

0x02、 设置 Status bar 字体颜色

在完成 0x01 之后我们的问题就变成了,当前 status bar 的颜色和其中文字的颜色相近,此时如何修改 status bar 中文字/图表颜色?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

上述代码设置 status bar 上部文字图表颜色

0x03、 进一步的问题

我们的主题色是白色也就是说 colorPrimaryDark 是白色,这时候我们的问题就是 背景和文字都是白色。导致混淆。

在 API ≥ 23 的时候我们可以使用 0x02 的方式修改 status bar 文字颜色。但是在这之前的版本我们怎么做? 1. 可以:我们使用半透明 status bar 2. 也可以替换

0x01、 设置 Status bar 颜色

1.1、 API ≥ 23

  1. 设置 status bar 颜色

     <style name="AppTheme" >
         <!-- Customize your theme here. -->
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <!-- 修改此值即可 -->
         <item name="colorAccent">@color/colorAccent</item>
     </style>
  2. 设置 status bar 中文字颜色

    //白底黑字
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

1.2、 23 > API ≥ 21

  1. 只设置 status bar 颜色,只是其不同于 API ≥ 23 时候的颜色。

参考

Last updated