当 primaryDark 为白色时更改状态栏文本颜色

新手上路,请多包涵

我正在尝试重现 Google 日历应用程序的行为: 在此处输入图像描述

但我还没有找到改变状态文本颜色的方法。如果我将 colorPrimaryDark 设置为白色,我看不到图标,也看不到状态栏的文本,因为它们的颜色也是白色的。

有什么办法可以改变状态栏的文字颜色吗?

原文由 MarcForn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 911
2 个回答

我不确定您尝试针对哪个 API 级别,但如果您可以使用 API 23 特定的东西,您可以将以下内容添加到您的 AppTheme styles.xml:

 <item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowLightStatusBar">true</item>

android:windowLightStatusBar 设置为 true 时,状态栏颜色为白色时可以看到状态栏文本颜色,反之亦然,当 android:windowLightStatusBar 设置为 false 时,状态栏文本颜色将设计为在状态栏颜色较暗时可见。

例子:

 <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Status bar stuff. -->
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="android:windowLightStatusBar">true</item>
</style>

原文由 Jon 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 API 21+,这对我有用:

 WindowInsetsControllerCompat windowInsetsController =
                WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
windowInsetsController.setAppearanceLightStatusBars(true);

我用

Theme.AppCompat.DayNight

此代码适用于白天和夜间模式:

 getWindow().setStatusBarColor(getWindow().getNavigationBarColor());
WindowInsetsControllerCompat windowInsetsController =
                WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO)
            windowInsetsController.setAppearanceLightStatusBars(true);
        else
            windowInsetsController.setAppearanceLightStatusBars(false);

原文由 Cor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题