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