Изменить нажатый цвет элемента панели действий на панели действий Lollipop

Я использую AppCompat и успешно реализовал новую панель действий, развернутую с помощью леденца на палочке. Единственная проблема - это нажатый цвет фона элементов действий. Я хочу показать другой цвет фона для элемента действия при нажатии. Любая идея, как это можно сделать?


person Raquib-ul Alam    schedule 30.10.2014    source источник


Ответы (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, последняя из которых включает рябь.

person alanv    schedule 30.10.2014
comment
@alanv Как я могу сделать это с помощью панели инструментов поддержки? actionBarItemBackground и selectableItemBackground, похоже, не работают, когда я расширяю Widget.AppCompat.Toolbar. - person Eric Cochran; 21.01.2015
comment
@alanv Не возражай; Я понял, почему: я использовал элемент пользовательского действия. - person Eric Cochran; 21.01.2015

для меня это сработало:

    <!-- pre 21 -->
    <item name="actionBarItemBackground">@drawable/selector_ab_tab_indicator</item>
    <!-- post 21 -->
    <item name="android:selectableItemBackgroundBorderless">@drawable/selector_ab_tab_indicator</item>
person wutzebaer    schedule 16.02.2016