Change Drawable Based on Theme
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.
frenziedherring
Updated on June 04, 2022Comments
-
frenziedherring almost 2 years
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.
-
AlexS over 5 yearsHow about making it programmatically?
-
frenziedherring over 5 yearsThat particular answer gives an example of attr -> R identifier -> dimension. You'll have to instead use that identifier to access a drawable
-
Big McLargeHuge about 4 years@AlexS try
drawable.applyTheme(view.context.theme)