Madhur Ahuja
Madhur Ahuja

Reputation: 22671

How to change the Action bar action icons depending on theme

I have an app where I allow the user to change the theme to change through preferences. I am just changing the from Theme.Holo to Theme.Holo.Light . Everything works fine, except the action bar action icons.

How do I change the icons depending upon theme? Currently they are hardcoded in menu.xml as follows:

<item android:id="@+id/action_search"
    app:showAsAction="collapseActionView|always"
      android:icon="@drawable/ic_action_search"
      android:orderInCategory="50"
       app:actionViewClass="android.support.v7.widget.SearchView" 
      android:title="@string/action_search"/>

     <item
    android:id="@+id/action_expandall"
    android:orderInCategory="55"
    app:showAsAction="never"
    android:title="@string/action_expandall"/>

              <item
    android:id="@+id/action_collapseall"
    android:orderInCategory="60"
    app:showAsAction="never"
    android:title="@string/action_collapseall"/>


 <item
    android:id="@+id/action_selecteverything"
    android:orderInCategory="101"
    app:showAsAction="never"
    android:title="@string/action_selecteverything"/>

    <item
    android:id="@+id/action_selectallcategories"
    android:orderInCategory="102"
    app:showAsAction="never"
    android:title="@string/action_selectallcategories"/>


   <item
    android:id="@+id/action_selectallfeeds"
    android:orderInCategory="103"
    app:showAsAction="never"
    android:title="@string/action_selectallfeeds"/>

     <item
    android:id="@+id/action_selectnone"
    android:orderInCategory="104"
    app:showAsAction="never"
    android:title="@string/action_selectnone"/>

<item
    android:id="@+id/action_settings"
    android:orderInCategory="105"
    app:showAsAction="never"
    android:icon="@drawable/action_settings"
    android:title="@string/action_settings"/>

 <item
    android:id="@+id/action_refresh"
    android:orderInCategory="107"
    app:showAsAction="always"
    android:icon="@drawable/navigation_refresh"
    android:title="@string/action_refresh"/>


        <item
    android:id="@+id/action_accept"
    android:orderInCategory="108"
    app:showAsAction="always"
    android:icon="@drawable/navigation_accept"
    android:title="@string/action_accept"/>

          <item
    android:id="@+id/action_logout"
    android:orderInCategory="109"
    app:showAsAction="never"
    android:title="@string/action_logout"/>

            <item
    android:id="@+id/action_about"
    android:orderInCategory="110"
    app:showAsAction="never"
    android:title="@string/action_about"/>

Upvotes: 0

Views: 378

Answers (1)

Aldo Borrero
Aldo Borrero

Reputation: 547

One posible solution is to create two different menus.xml holding the light and dark icons and before you inflate the menu, check what the current theme is and choose one or another.

EDIT:

Here @Steven Byle has resolved this in a more beautiful way (which is using themes): https://stackoverflow.com/a/14608585/2025299

Upvotes: 1

Related Questions