Фон ActionBar с темой MaterialComponents - PullRequest
1 голос
/ 13 октября 2019

Я хочу настроить свой 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>

В папке значений-ночи:

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

Не уверен, почему мой цвет фона ActionBarне меняется соответственно. Я пытался изменить свою тему и другими способами, но ничего не работает. Вот мои другие попытки:

Вместо actionBarStyle я использовал actionBarTheme.

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

Я также пытался использовать colorPrimary.

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

Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Поскольку вы используете тему приложения Theme.MaterialComponents.DayNight, цвет фона ActionBar определяется по умолчанию атрибутом colorPrimary.

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

, где mycolorопределить в res/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

0 голосов
/ 13 октября 2019

Скорее всего, это потому, что это неправильный способ объявления цветов в приложении.

Как правило, ресурсы цвета расположены в единственном файле: 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

Эти цвета могут затемуказывать префикс @color/ в файлах XML или R.color.* в коде Java / Kotlin вашего приложения.

Надеюсь, это поможет!

...