39

I have created a NavigationDrawer in my app using the ActionBar. enter image description here

As showed in the picture above I want to change the NavigationDrawer toggle button icon to something I want. How can I change it?

Here is my code:-

mDrawerList.setOnItemClickListener(new SlideMenuClickListener());


    // enabling action bar app icon and behaving it as toggle button
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.hamburger_button, //nav menu toggle icon
            R.string.app_name, // nav drawer open - description for accessibility
            R.string.app_name // nav drawer close - description for accessibility
            ) {
        public void onDrawerClosed(View view) 
        {

            getActionBar().setTitle(mTitle);
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle("Settings");
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
}

If I try changing it to R.drawable.hamburger_button It still shows the default icon

user3713706
  • 1,243
  • 4
  • 15
  • 18
  • R.drawable.hamburger_button is your own custom image and not the same as the one provided by android ? – Shivam Verma Jun 30 '14 at 04:17
  • yes. It is my custom image. – user3713706 Jun 30 '14 at 04:28
  • http://stackoverflow.com/questions/9252354/how-to-customize-the-back-button-on-actionbar please take a loot at this link – Giant Jun 30 '14 at 04:57
  • 1
    @HakHak this works. Thanks a lot. Please post a answer so that I accept it. Also any idea how I can I place the app title in the center of the action bar? – user3713706 Jun 30 '14 at 05:09
  • @user3713706 no need mate.. because im doing that thing as well and was able to make it work i was just hoping it can help you as well happy coding :) – Giant Jun 30 '14 at 05:11

10 Answers10

61

To replace the drawer indicator icon with your own drawable(non animated) using the v7 ActionBarDrawerToggle, you can do the following:

//After instantiating your ActionBarDrawerToggle
mDrawerToggle.setDrawerIndicatorEnabled(false);
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.your_custom_icon, getActivity().getTheme());
mDrawerToggle.setHomeAsUpIndicator(drawable);
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
            mDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            mDrawerLayout.openDrawer(GravityCompat.START);
        }
    }
});
Mateus Gondim
  • 5,362
  • 6
  • 31
  • 51
10

Try changing the icon manually by using setHomeAsUpIndicator() .

Like,

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_drawer);

and

ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(...){};
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer_toggle);
Msp
  • 2,493
  • 2
  • 20
  • 34
4

Please make sure you include these to sync the states of the icon properly.

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}
Shivam Verma
  • 7,973
  • 3
  • 26
  • 34
3

Under the initialization of ActionBarDrawerToggle write the following code:

toolbar.setNavigationIcon(R.drawable.ic_menu_camera);
Ahmed Raafat
  • 162
  • 4
  • 6
2

Here is a working solution:

    setSupportActionBar(toolbar2);
    toggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar2, R.string.navigation_drawer_open,R.string.navigation_drawer_close);

    bottomNavigationView.setOnNavigationItemSelectedListener(this);
    navigationView=findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    toggle.syncState();

    //------------To change Navigation drawer icon ---------------//
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_favorite_black_24dp);

this Youtube video helped https://www.youtube.com/watch?v=biUaIO-N7Ew

Nadeem Iqbal
  • 2,357
  • 1
  • 28
  • 43
amr eshak
  • 31
  • 2
1
 mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.hamburger_button(This you the icon), //nav menu toggle icon
            R.string.app_name, // nav drawer open - description for accessibility
            R.string.app_name // nav drawer close - description for accessibility
            )
1

call super class methods of ActionBarDrawerToggle super.onDrawerClosed(view) and super.onDrawerOpened(drawerView) like

mDrawerToggle = new ActionBarDrawerToggle(...){
        public void onDrawerClosed(View view) 
         {
           super.onDrawerClosed(view);
           //---your code
         }

        public void onDrawerOpened(View drawerView) 
         {
           super.onDrawerOpened(drawerView);
           //---your code
         }
 }
shobhan
  • 1,460
  • 2
  • 14
  • 28
1

For me adding the setHomeAsUpIndicator worked.

mDrawerToggle = new ActionBarDrawerToggle(
            this,                  /* host Activity */
            mDrawerLayout,         /* DrawerLayout object */
            R.drawable.custom_icon,  /* nav drawer image to replace 'Up' caret */
            R.string.drawer_open,  /* "open drawer" description for accessibility */
            R.string.drawer_close  /* "close drawer" description for accessibility */
    ) {
        public void onDrawerClosed(View view) {
            getSupportActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
            getSupportActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.custom_icon);
pcsaunak
  • 289
  • 2
  • 12
0

First of all you should in manifest try this code :

android:icon="@drawable/ic_icon1" 

This is image for total logo of your app

android:logo="@drawable/ic_drower" 

This is image for action bar

After that in main-activity try this code :

actionBar.setDisplayUseLogoEnabled(true);
0
setSupportActionBar(yourToolbar);
yourToolbar.setNavigationIcon({yourDrawable});

Don't set Navigation Icon before setSupportActionBar()