Android 仅在暗模式下自定义应用程序栏颜色

Android 仅在暗模式下自定义应用程序栏颜色,android,material-design,Android,Material Design,我正在我的应用程序中使用材质主题。根据材料网站上的规定, 应用程序栏在浅色主题中使用ColorPrimary,在深色主题中使用ColorSurface。我想在黑暗主题中更改应用程序栏的颜色。显然,我可以通过仅在黑暗主题中更改ColorSurface属性来做到这一点,但它会影响其他也使用此属性的组件,如对话框、计时器等。是否有任何方法可以仅在黑暗主题中更改应用程序栏的颜色?我有点晚了,但是,如果有人正在寻找某种形式的解决方案,下面的方法对我很有效 我不确定基于样式的解决方案是什么,但您可以通过编程

我正在我的应用程序中使用材质主题。根据材料网站上的规定,
应用程序栏在浅色主题中使用
ColorPrimary
,在深色主题中使用
ColorSurface
。我想在黑暗主题中更改应用程序栏的颜色。显然,我可以通过仅在黑暗主题中更改
ColorSurface
属性来做到这一点,但它会影响其他也使用此属性的组件,如对话框、计时器等。是否有任何方法可以仅在黑暗主题中更改应用程序栏的颜色?

我有点晚了,但是,如果有人正在寻找某种形式的解决方案,下面的方法对我很有效

我不确定基于样式的解决方案是什么,但您可以通过编程方式执行以下操作(我在这篇关于daynight主题的文章中发现了这一点:)

您将使用主题父项,如下所示:

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

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

如果我确定,您想更改appbar in dark主题的背景色,那么如果是,请使用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>

@样式/MyActionBar
@android:颜色/深灰色

我希望这就是你想要的…

这不允许我自定义我的应用程序栏的颜色,而只是将模式设置为白天或晚上。我理解你的问题是为你的应用程序使用明暗主题,并仅将应用程序栏更改为暗,上面的代码就是这样做的。它只是检测黑暗或光明模式是否处于活动状态,并允许您对其进行操作,它不设置任何内容。如果您希望更改actionBar的颜色,可以使用上面的代码
getSupportActionBar()。setBackgroundDrawable等等,或者给我提供一点更详细的信息,我会帮你解决(比如带工具栏的appbar布局?你使用的是什么主题?)最好的答案。它帮助了我。有一些教程可以学习如何在主题中更改颜色吗?我永远不知道我要带父母去哪里。对于材料主题,我建议。对于继承样式的父级,没有特定的文档。对我来说,大多数时候,它都在搜索和进入小部件样式本身@韦努斯
<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>