主题中的colorPrimary和colorPrimaryDark有什么区别?

41

我正在努力理解Android中主题的工作原理。我不知道为什么colorPrimaryDark对我无效,或者我可能做错了。

我尝试了这个设置,但我的操作栏变成了红色,因为colorPrimary的原因:

<style name="MenuTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="colorPrimary">#FF0000</item>
  <item name="colorPrimaryDark">#0000FF</item>
  <item name="colorAccent">#00FF00</item>    
  <item name="actionMenuTextColor">#0000FF</item>
</style>
我试图删除colorPrimary,结果变成了黑色(我原以为会使用蓝色,因为有colorPrimaryDark)。

我尝试删除colorPrimary,结果变成了黑色(我本以为它会使用蓝色,因为有colorPrimaryDark):

<style name="MenuTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="colorPrimaryDark">#0000FF</item>
  <item name="colorAccent">#00FF00</item>    
  <item name="actionMenuTextColor">#0000FF</item>
</style>

我尝试删除colorPrimaryDark并保留colorPrimary,但它又变成了红色:

<style name="MenuTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="colorPrimary">#FF0000</item>
  <item name="actionMenuTextColor">#0000FF</item>
</style>

我不知道是我用错了还是它根本没有改变。有人可以告诉我它们之间的区别吗?

我也尝试使用actionMenuTextColor来更改操作栏中文本的颜色,但是没有任何反应。我发现解决方案是使用parent="Theme.AppCompat.Light.DarkActionBar"而不是单独使用parent="Theme.AppCompat.Light"。但当然它只会变成白色。我仍在努力寻找其他方法来使它变成不同的颜色。

4个回答

101
  • colorPrimary – 应用程序栏的颜色。
  • colorPrimaryDark – 状态栏和上下文应用程序栏的颜色; 通常是 colorPrimary 的深色版本。
  • colorAccent – UI 控件(如复选框、单选按钮和编辑文本框)的颜色。
  • windowBackground – 屏幕背景的颜色。
  • textColorPrimary – 应用程序栏中 UI 文本的颜色。
  • statusBarColor – 状态栏的颜色。
  • navigationBarColor – 导航栏的颜色。

您可以使用以下链接设置您的样式。

https://blog.xamarin.com/material-design-for-your-xamarin-forms-android-apps/


1
我已经通过你的解释和我阅读的文档理解了它。我已经尝试了你给出的其他示例,但我注意到有些效果不起作用,比如colorPrimaryDark、statusBarColor和textColorPrimary。为什么会这样?在使用它之前,我需要做些什么吗? - jace
1
请问在哪里可以获取所有这些colorPrimarycolorPrimaryDark等的完整列表,以便我们可以在应用程序中覆盖它们并根据需要更改它们的值?如果有任何资源或链接,将不胜感激。 - Stack Overflow
使用颜色工具 material.io/resources/color。 - Anatolii Shuba
@AnatoliyShuba,我同意,这个工具非常好。我唯一的问题是,它生成的XML文件中使用的颜色名称不符合Android的命名约定(例如,它返回“primaryColor”,而Android希望是“colorPrimary”,其他值也是如此)。 - Kenneth Argo

12
  • colorPrimary - 应用程序屏幕和组件中最常显示的颜色。当绘制在表面或背景颜色上方时,该颜色应符合文本/图标的可访问性指南。(默认值:#6200EE)
  • colorPrimaryVariant - 主要颜色的音调变化。(默认值:#3700B3)
  • colorOnPrimary - 在主要颜色上绘制时符合文本/图标可访问性指南的颜色。(默认值:#FFFFFF)
  • colorSecondary - 应用程序的次要品牌颜色,通常是主要品牌颜色的强调补充颜色。(默认值:#03DAC6)
  • colorSecondaryVariant - 次要颜色的音调变化。(默认值:#018786)
  • colorOnSecondary - 在次要颜色上绘制时符合文本/图标可访问性指南的颜色。(默认值:#000000)

https://material.io/develop/android/theming/color


2
android:background="?attr/colorPrimary"
您可以使用此功能来使用默认的colorPrimary值。

0

Material Theme Colors

  • colorPrimarycolorSecondary代表您品牌的颜色

  • colorPrimaryVariantcolorSecondaryVariant是您品牌颜色的浅色或深色阴影

  • colorSurface用于材料的“面板”(如卡片和底部面板)

  • android:colorBackground是您应用程序窗口的背景颜色

  • colorError是用于错误和警告的颜色,正如其名称所示

  • 各种“On”颜色(colorOnPrimarycolorOnSecondarycolorOnSurface等)用于对其他颜色上显示的前景内容(如文本和图标)进行着色。它们需要满足无障碍要求,并具有与其显示的颜色足够的对比度。

更多信息请参见:https://material.io/blog/android-material-theme-color


显然,这些“On”颜色都不能改变操作栏的文本颜色。我尝试了一些其他的东西,比如android:textColor、android:textColorPrimary等,但没有任何一个可以改变操作栏文本的颜色。应该使用colorOnPrimary...非常令人困惑。 - JPM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接