带有 MaterialComponents 主题的 ActionBar 背景

Cha*_*har 9 android android-layout android-actionbar 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>
Run Code Online (Sandbox Code Playgroud)

在值文件夹中:

<drawable name="actionBarBackground">#FFFFFFFF</drawable>
Run Code Online (Sandbox Code Playgroud)

在 values-night 文件夹中:

<drawable name="actionBarBackground">#FF000000</drawable>
Run Code Online (Sandbox Code Playgroud)

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

相反actionBarStyle,我使用了actionBarTheme.

<item name="actionBarTheme">@style/MyActionBar</item>
Run Code Online (Sandbox Code Playgroud)

我也尝试使用colorPrimary.

<item name="colorPrimary">@color/actionBarBackground</item>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Gab*_*tti 15

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

  <style name="AppThemeActionBar" parent="Theme.MaterialComponents.DayNight">
    <item name="colorPrimary">@color/mycolor</item>
  </style>
Run Code Online (Sandbox Code Playgroud)

在哪里mycolor定义res/values/colors.xml

<resources>
  <color name="mycolor">#xxxxxx</color>
  ...
</resources>
Run Code Online (Sandbox Code Playgroud)

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

  <style name="AppThemeActionBar" parent="Theme.MaterialComponents.DayNight">
      <item name="actionBarStyle">@style/Custom.ActionBar</item>
      ...
  </style>
Run Code Online (Sandbox Code Playgroud)

在哪里:

  <style name="Custom.ActionBar" parent="Widget.MaterialComponents.Light.ActionBar.Solid">
    <item name="background">@color/mycolor</item>
  </style>
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用该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>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


sht*_*lik 11

对我来说,设置背景和 colorPrimary 都没有帮助。显然,这是预期的行为,根据使用大部分屏幕的组件的黑暗主题指南。他们应该使用 colorSurface 作为他们的背景而不是colorPrimarycolorAccentAppBarLayouts, Toolbars,ActionBars现在默认为Surface深色主题中的样式。

所以我必须为我的主题定义 colorSurface 属性才能使其工作。

<item name="colorSurface">@color/my_color_primary_dark</item>
Run Code Online (Sandbox Code Playgroud)


Edr*_*ric 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>
Run Code Online (Sandbox Code Playgroud)

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

res/values-<qualifier>/colors.xml
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!