ab11
ab11

Reputation: 20090

Android: dynamically change ActionBar icon?

I would like to dynamically change the "home" icon in the ActionBar. This is easily done in v14 with ActionBar.setIcon(...), but I can't find anyway to accomplish this in previous versions.

Upvotes: 24

Views: 25325

Answers (4)

youness
youness

Reputation: 13

I would say you do something like this :

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_drawer);

see the link How to change the icon actionBarCompat

Upvotes: 1

Lina Shyshova
Lina Shyshova

Reputation: 546

The ActionBar will use the android:logo attribute of your manifest, if one is provided. That lets you use separate drawable resources for the icon (Launcher) and the logo (ActionBar, among other things).

Upvotes: 0

Ben Neill
Ben Neill

Reputation: 2999

If you are using the ActionbarCompat code provided by google, you can access the home icon via the ActionBarHelperBase.java class for API v4 onwards.

    //code snippet from ActionBarHelperBase.java
    ...
    private void setupActionBar() {
    final ViewGroup actionBarCompat = getActionBarCompat();
    if (actionBarCompat == null) {
        return;
    }

    LinearLayout.LayoutParams springLayoutParams = new LinearLayout.LayoutParams(
            0, ViewGroup.LayoutParams.MATCH_PARENT);
    springLayoutParams.weight = 1;

    // Add Home button
    SimpleMenu tempMenu = new SimpleMenu(mActivity);
    SimpleMenuItem homeItem = new SimpleMenuItem(tempMenu,
            android.R.id.home, 0, mActivity.getString(R.string.app_name));
    homeItem.setIcon(R.drawable.ic_home_ftn);
    addActionItemCompatFromMenuItem(homeItem);

    // Add title text
    TextView titleText = new TextView(mActivity, null,
            R.attr.actionbarCompatTitleStyle);
    titleText.setLayoutParams(springLayoutParams);
    titleText.setText(mActivity.getTitle());
    actionBarCompat.addView(titleText);
}
...

You should be able to modify the code to the home button accessible to the activities that extend ActionBarActivity and change it that way.

Honeycomb seems a little harder and it doesn't seem to give such easy access. At a guess, its id should also be android.R.id.home so you may be able to pull that from the view in ActionBarHelperHoneycomb.java

Upvotes: 16

pommedeterresautee
pommedeterresautee

Reputation: 1903

If your actionbar works like Sherlock and is based on menu items, this is my solution:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem switchButton = menu.findItem(R.id.SwitchSearchOption);     
    if(searchScriptDisplayed){
        switchButton.setIcon(R.drawable.menu_precedent);
    }else{
        switchButton.setIcon(R.drawable.icon_search);
    }
    return super.onPrepareOptionsMenu(menu);

}

Upvotes: 22

Related Questions