具有MaterialComponents主题的ActionBar背景

时间:2019-10-13 11:39:05

标签: android android-layout material-design material-components material-components-android

我想自定义我的ActionBar。我的主题如下:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
    <item name="actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@style/ThemeOverlay.MaterialComponents.ActionBar">
    <item name="background">@drawable/actionBarBackground</item>
</style>

在“值”文件夹中:

<drawable name="actionBarBackground">#FFFFFFFF</drawable>

在values-night文件夹中:

<drawable name="actionBarBackground">#FF000000</drawable>

不确定为什么我的ActionBar背景颜色没有相应更改。我也尝试过以其他方式更改主题,但是没有任何效果。这是我的其他尝试:

我使用actionBarStyle而不是actionBarTheme

<item name="actionBarTheme">@style/MyActionBar</item>

我也尝试使用colorPrimary

<item name="colorPrimary">@color/actionBarBackground</item>

我想念什么吗?

4 个答案:

答案 0 :(得分:3)

对我来说,设置背景和colorPrimary都不起作用。 显然,this is the intended behavior就像针对dark theme guidance的那样,对于使用大部分屏幕的组件来说,它们应该使用colorSurface作为背景,而不是colorPrimarycolorAccent,因此{ {1}},AppBarLayoutsToolbars现在在深色主题中默认为其ActionBars样式。

所以我必须为它们定义colorSurface属性,以使其起作用。

Surface

答案 1 :(得分:1)

由于您使用的是Theme.MaterialComponents.DayNight应用主题,因此ActionBar背景颜色默认由 colorPrimary 属性定义。

  <style name="AppThemeActionBar" parent="Theme.MaterialComponents.DayNight">
    <item name="colorPrimary">@color/mycolor</item>
  </style>

其中mycolorres/values/colors.xml中定义

<resources>
  <color name="mycolor">#xxxxxx</color>
  ...
</resources>

您还可以使用应用主题中的 actionBarStyle 属性来自定义背景颜色。
像这样:

  <style name="AppThemeActionBar" parent="Theme.MaterialComponents.DayNight">
      <item name="actionBarStyle">@style/Custom.ActionBar</item>
      ...
  </style>

其中:

  <style name="Custom.ActionBar" parent="Widget.MaterialComponents.Light.ActionBar.Solid">
    <item name="background">@color/mycolor</item>
  </style>

否则,您可以使用 actionBarTheme 属性覆盖背景色:

  <style name="AppThemeActionBar" parent="Theme.MaterialComponents.DayNight">
    <item name="actionBarTheme">@style/ThemeOverlay.ActionBar</item>
    ...
  </style>

  <style name="ThemeOverlay.ActionBar" parent="">
    <item name="colorPrimary">@color/mycolor</item>
  </style>

enter image description here

答案 2 :(得分:1)

我使用的是最新的 MDC 稳定版,这就是它的工作原理。

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
    <item name="colorPrimary">@color/purple_500</item>
    <item name="actionBarStyle">@style/Widget.MaterialComponents.ActionBar.PrimarySurface</item>
</style>

如果您希望应用栏的颜色与您的颜色表面相同,请将 @style/Widget.MaterialComponents.ActionBar.PrimarySurface 更改为 @style/Widget.MaterialComponents.ActionBar.Surface

答案 3 :(得分:0)

这很可能是因为这不是在应用中声明颜色的正确方法。

通常,颜色资源位于一个文件中:colors.xml

此XML文件通常位于应用程序的资源文件夹(通常为res/values/colors.xml

然后使用<resources>元素作为XML文件和您的颜色资源(由<color>元素定义)的根声明它们:

<!-- Note: The XML header (aka <?xml version="1.0" ...?>) is optional -->
<resources>
    <color name="your_color_res">#FFFFFF</color>
    <!-- Your other colour resources go here -->
</resources>

然后,您可以通过使用以下文件格式在应用程序资源中创建相同的colors.xml来指定颜色资源的限定符:

res/values-<qualifier>/colors.xml

然后可以在XML文件中用@color/前缀或在应用程序的Java / Kotlin代码中用R.color.*引用这些颜色。

希望这会有所帮助!