Max Koretskyi
Max Koretskyi

Reputation: 105439

How to set drawer toggle icon (`hamburger`) for the ActionBarDrawerToggle v7 without toolbars

I'm using action bar from android.support.v7.app.ActionBarActivity so my activity is declared like this:

public class MyActivity extends ActionBarActivity {

I'm reading the tutorial which shows how to add Drawer:

DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close);

This is for the import android.support.v4.app.ActionBarDrawerToggle. Now I've decided to use v7 since v4 is deprecated, but the constructor for the v7 doesn't accept icon for the drawer. I've googled and found that the solution is to use the constructor flavor that accepts toolbar:

ActionBarDrawerToggle(this, drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)

but I don't use toolbars. So I don't understand how I can set icon with v7 without toolbars. Should I switch to using Toolbars?

Upvotes: 1

Views: 2754

Answers (1)

Vishal Jain
Vishal Jain

Reputation: 175

Hey you get the solution here..

private Toolbar toolbar;
toolbar = (Toolbar) findViewById(R.id.toolbar);

if (toolbar != null) {
    setSupportActionBar(toolbar);
    toolbar.setNavigationIcon(R.drawable.ic_drawer);

    mDrawerToggle = new ActionBarDrawerToggle(this,
                mDrawerLayout,
                toolbar,
                R.string.drawer_open,
                R.string.drawer_close) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
        }
    };

    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerToggle.syncState();

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
}

This one is also a good approach, personally i use this one.

public class MyActionBarDrawerToggle extends android.support.v7.app.ActionBarDrawerToggle {

    public MyActionBarDrawerToggle(Activity activity, final DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes) {
        super(activity, drawerLayout, toolbar, openDrawerContentDescRes, closeDrawerContentDescRes);

        setHomeAsUpIndicator(R.drawable.drawer_toggle);
        setDrawerIndicatorEnabled(false);

        setToolbarNavigationClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                drawerLayout.openDrawer(Gravity.LEFT);
            }
        });
     }
}

Thank you.

Upvotes: 5

Related Questions