Изменение дизайна материала AppCompat ActionBar Color

Я использовал цвет строки состояния AppCompat с помощью actionBarStyle и создавал стиль с фоном, который является цветом, который я хочу.

Теперь, с Material Design AppCompat, этот метод больше не работает.

Вы можете мне помочь? Благодарю.

Solutions Collecting From Web of "Изменение дизайна материала AppCompat ActionBar Color"

Существует новый атрибут colorPrimary который вы можете определить в своей теме. Это даст вам ActionBar или Toolbar сплошной цвет.

Следуя небольшому примеру:

 <style name="AppTheme" parent="Theme.AppCompat.Light"> <!-- colorPrimary is used for the default action bar background --> <item name="colorPrimary">@color/my_action_bar_color</item> </style> 

Обратите внимание: он должен быть только colorPrimary , а не android:colorPrimary , в каждой папке values-v21 кроме values-v21 .

Вы можете узнать больше о настройке цветовой палитры на сайте developer.android.com .

В моем случае у @reVerse был частичный ответ. Мне пришлось внести некоторые дополнительные изменения, чтобы заставить colorPrimary работать, потому что я настраивал другие части панели инструментов … в частности, цвет текста.

Вот мой рабочий файл styles.xml с комментариями, указывающими, что я делал неправильно:

 <!-- As @reVerse mentioned, you need to use colorPrimary instead of android:colorPrimary --> <style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/my_toolbar_color</item> </style> <!-- I was incorrectly using @style/Theme.AppCompat.Light for the popupTheme attribute --> <style name="MyToolbarStyle" parent="Widget.AppCompat.ActionBar"> <item name="theme">@style/MyToolbarTextStyle</item> <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item> </style> <!-- I was incorrectly using Them.AppCompat.Light for the parent here --> <style name="MyToolbarTextStyle" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:textColorPrimary">@color/my_toolbar_text_color</item> </style> 

Таким образом, при настройке больше, чем на цвет фона панели инструментов, вы должны обязательно использовать одну из тем ThemeOverlay или, по какой-то причине, colorPrimary будет проигнорирован.

Для полноты, вот файл макета, который я использую для своей панели инструментов, Toolbar.xml:

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schmeas.android.com/apk/res-auto" style="@style/MyToolbarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

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

  <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/ColorPrimary</item> <item name="colorPrimaryDark">@color/ColorPrimaryDark</item> <!-- Customize your theme here. --> </style> 

См. Также: Создание пользовательского ActionBar

В инструкциях по настройке панели приложений рекомендуется настроить тему в файле манифеста Android следующим образом:

 <application android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> 

Однако, по моему опыту, это colorPrimary стиль colorPrimary настроенный для пользовательского AppTheme. Что для меня работало, так это определение такой темы:

 <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> 

А затем использовать эту тему в файле AndroidManifest.

 <application android:theme="@style/AppTheme" /> 

После этого настройка цвета фона панели инструментов в активности на основе colorPrimary работала нормально.

 <android.support.v7.widget.Toolbar android:id="@+id/my_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

(Настройка ThemeOverlay темной темой гарантирует, что текст светится.)