Я использую AppCompat и успешно реализовал новую панель действий, развернутую с помощью леденца на палочке. Единственная проблема - это нажатый цвет фона элементов действий. Я хочу показать другой цвет фона для элемента действия при нажатии. Любая идея, как это можно сделать?
Изменить нажатый цвет элемента панели действий на панели действий Lollipop
Ответы (2)
У вас есть несколько вариантов. Но сначала немного предыстории:
Элементы действий в AppCompat используют атрибут темы ?attr/actionBarItemBackground (см. res/values/styles_base.xml), для которого задано значение ?attr/selectableItemBackgroundBorderless (см. res/styles/ themes_base.xml) по умолчанию. Для этого атрибута задана рябь без полей на L и @drawable/abc_item_background_holo_light в предыдущих версиях.
Сама панель действий тематизируется путем установки ?attr/actionBarTheme (themes_base.xml) и по умолчанию имеет значение @style/ThemeOverlay.AppCompat.ActionBar. В Holo эта тема переопределяет actionBarItemBackground, поэтому вам нужно будет внести свои изменения здесь.
Таким образом, простой способ переопределить фон элемента действия для всех панелей действий — установить actionBarItemBackground в файле actionBarTheme. Вы, вероятно, также захотите переопределить selectableItemBackground, поскольку элемент CloseMode не использует actionBarItemBackground (не знаю, почему).
значения/styles.xml:
<style name="MyAppTheme" parent="Theme.AppCompat">
...
<item name="actionBarTheme">@style/MyActionBarTheme</item>
</style>
<style name="MyActionBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
...
<item name="actionBarItemBackground">@drawable/whatever_you_want</item>
<item name="selectableItemBackground">@drawable/whatever_you_want</item>
</style>
Примечание. Эти изменения применяются ко всем уровням API, поэтому, если вы по-прежнему хотите, чтобы в API 21+ была рябь, вам понадобятся версии @drawable/whatever_you_want как для drawable, так и для drawable-v21, последняя из которых включает рябь.
для меня это сработало:
<!-- pre 21 -->
<item name="actionBarItemBackground">@drawable/selector_ab_tab_indicator</item>
<!-- post 21 -->
<item name="android:selectableItemBackgroundBorderless">@drawable/selector_ab_tab_indicator</item>