Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to replace the hamburger icon used for ActionBarToggle on Android Toolbar with a custom drawable?

I have implemented a basic ActionBarDrawerToggle using the new Toolbar in Android 5.0.

However, I am unable to figure out how to change the default hamburger icon that is supplied. From the android documentation it says that "the given Activity will be linked to the specified DrawerLayout and the Toolbar's navigation icon will be set to a custom drawable... This drawable shows a Hamburger icon when drawer is closed and an arrow when drawer is open. It animates between these two states as the drawer opens."

I currently have this all working correctly with the following code, however I want to replace the default supplied hamburger with my own drawable.

Here is my current code:

MainActivity.java

@InjectView(R.id.main_activity_toolbar) Toolbar mToolbar;  @InjectView(R.id.main_activity_drawer_layout) DrawerLayout mDrawerLayout;  @Override protected void onCreate(Bundle savedInstanceState) {     setContentView(R.layout.main_activity);     super.onCreate(savedInstanceState);      setSupportActionBar(mToolbar);     mToolbar.setNavigationIcon(R.drawable.navigation);      mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close) {         public void onDrawerClosed(View view) {             super.onDrawerClosed(view);             invalidateOptionsMenu();         }          public void onDrawerOpened(View drawerView) {             super.onDrawerOpened(drawerView);             invalidateOptionsMenu();         }     };      mDrawerLayout.setDrawerListener(mDrawerToggle);     getSupportActionBar().setDisplayHomeAsUpEnabled(true);     getSupportActionBar().setHomeButtonEnabled(true); } 

This line:

mToolbar.setNavigationIcon(R.drawable.navigation); 

doesn't seem to work.

Is this possible to do? Thanks!

ActionBarToggle Documentation - https://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html

like image 859
jet Avatar asked Nov 19 '14 22:11

jet


People also ask

How do you change the color of the hamburger icon?

Hi, You can change the color by going to Appearance > Customize > Header. Click on Mobile > Menu Icon and select the Style tab.

What is the hamburger icon called?

A hamburger icon, in user interface (UI) design, is a navigational symbol consisting of three stacked horizontal lines that indicate the location of a hidden menu. The icon got its name from the fact that its structure resembles a burger in a bun in a simplified graphic.


2 Answers

You can use the toolbar as Stand Alone mode, that means you should not use your toolbar as part of your ActionBarDrawerToggle constructor, you can achieve that using the below code:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, null,                        R.drawable.appbar, R.drawable.appbar) 

(Note how the toolbar instance is not being sent to the ActionBarDrawerToggle constructor)

Also, you should inflate your menu manually

mToolbar = (Toolbar) findViewById(R.id.nav_toolbar); mToolbar.inflateMenu(R.menu.base); 

And remove the setSupportActionBar(mToolbar); line of code.

Of course, you will have to handle the navigation click by yourself:

mToolbar.setOnMenuItemClickListener(new OnMenuItemClickListener() ... 

Then, you can open your drawer like this:

drawerButton = (BadgeDrawerButton) findViewById(R.id.badge_drawer_button); drawerButton.setOnClickListener(                        new View.OnClickListener() {                                @Override                               public void onClick(View v) {                                      mDrawerLayout.openDrawer(Gravity.LEFT);                               }                        }); 

Hope this may help.

like image 92
Roisgoen Avatar answered Sep 19 '22 16:09

Roisgoen


These two lines of code work for me:

mDrawerToggle.setDrawerIndicatorEnabled(false); //disable "hamburger to arrow" drawable mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer); //set your own 

And then call this:

mDrawerToggle.syncState(); 
like image 31
PhoEn-X Avatar answered Sep 20 '22 16:09

PhoEn-X