Change Drawable Based on Theme

android, styles

Solution

Seems like I'm always just a Google search or two away from my answers. The solution is:

in styles.xml

<attr name="buttonface_picture" format="reference"/>

then in the actual theme:

<item name="buttonface_picture">@drawable/buttonface_picture_dark</item>

or

<item name="buttonface_picture">@drawable/buttonface_picture_light</item>

Then, in the menu.xml:

<item
    android:id="@+id/menu_attach_existing_picture"
    android:icon="?attr/buttonface_picture"
    android:showAsAction="always"
    android:title="@string/menu_attach_existing_picture">
</item>

The Accessing Resources Page combined with this SO eventually got it to click in my brain.

Problem

I've got an image in two different colors, corresponding to two different themes in Android. I want to use them in my Action Bar. I want to refer to a drawable for the icon, theme agnostic, but have that drawable reference the light color for the light theme, and the dark color for the light theme. In the menu: ``` <item android:id="@+id/menu_attach_existing_picture" android:icon="@drawable/buttonface_picture" android:showAsAction="always" android:title="@string/menu_attach_existing_picture"> </item> ``` Then in the styles I want to have something that maps @drawable/buttonface_picture to @drawable/buttonface_picture_light in the light theme and @drawable/buttonface_picture_dark for the dark theme. I feel like there's got to be a way, but I'm having trouble finding the syntax. If it changes anything, I am using ActionBarSherlock.

Original source