仅在黑暗模式下自定义应用栏颜色

时间:2019-08-20 16:39:53

标签: android material-design

我在应用程序中使用了材质主题。根据材料网站here的规定, 应用程序栏在浅色主题中使用ColorPrimary,在深色主题中使用ColorSurface。我想在深色主题中更改应用栏的颜色。我显然可以通过仅在深色主题中更改ColorSurface属性来做到这一点,但是它也会影响其他使用此属性的组件,例如Dialogs,TimePickers等。有什么办法我可以 >更改深色主题中的应用栏颜色?

2 个答案:

答案 0 :(得分:0)

我来晚了,但是如果有人正在寻找某种形式的解决方案,那么下面的方法对我有用。

我不确定基于样式的解决方案是什么,但是您可以通过编程执行以下操作(我在本文中找到了有关昼夜主题的内容:Using the DayNight Theme

您将按照以下方式使用主题父项:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

然后您可以在任何要检查和进行更改的地方使用以下代码段

Java

//the & here is a bitwise AND operator as opposed to &&
int currentNightMode = getResources().getConfiguration().uiMode
    & Configuration.UI_MODE_NIGHT_MASK

switch (currentNightMode) {
    case Configuration.UI_MODE_NIGHT_NO:
        // Night mode is not active, we're in day time

    case Configuration.UI_MODE_NIGHT_YES:
        // Night mode is active, we're at night!
            getSupportActionBar().setBackgroundDrawable(
                new ColorDrawable(getResources().getColor(R.color.colorAccent))
             );
             break;

    case Configuration.UI_MODE_NIGHT_UNDEFINED:
        // We don't know what mode we're in, assume notnight

}

科特林

//again using a bitwise AND operator here
var currentNightMode: Int = this.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK

when(currentNightMode){
    Configuration.UI_MODE_NIGHT_NO ->{
         // Night mode is not active, we're in day time
    }

    Configuration.UI_MODE_NIGHT_YES ->{
        // Night mode is not active, we're in day time
         supportActionBar?.setBackgroundDrawable(
                    ColorDrawable(resources.getColor(R.color.colorAccent, null))
         )
    }

    Configuration.UI_MODE_NIGHT_UNDEFINED ->{
    // We don't know what mode we're in, assume notnight
    }
}

答案 1 :(得分:0)

如果我确定要更改深色主题中的应用栏的背景颜色,则可以使用Night qualifier制作一个新样式资源文件,声明您的应用样式并覆盖“ actionBarStyle”,例如

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="Widget.MaterialComponents.ActionBar.Solid">
<item name="background">@android:color/darker_gray</item>
</style>

我希望这就是你想要的...