Search code examples
androidandroid-actionbarnavigation-drawerdrawertoggle

Changing Hamburger Action bar Icon to Rotating Arrow Not Working, when Opening the Navigation Drawer in Android


I am using Navigation Drawer in my Android application,its Working fine.

i want to add some Animation for Open and Close the Navigation Drawer.

Animation:

1.Opening-Navigation Drawer show the Arrow ,Hide the Hamburger.

2.Closing-Again Show the Hamburger, hide the Arrow.

while Opening and closing it should be Rotate. i tried some code its not Working.

Please anyone help me to do this.

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@android:color/white</item>
</style>

I tried this , link i referred

import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;


//for Navigation Bar
        DrawerLayout drawerLayout;
        ListView listView;
        String[] drawerlist;
        ActionBarDrawerToggle drawerListener;

        private MyAdapter4 myAdapter4;

@Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alerts);




                //navigation initialize
                        drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
                        listView = (ListView) findViewById(R.id.drawerList);
                        drawerlist = getResources().getStringArray(R.array.drawerlist);

                        myAdapter4 = new MyAdapter4(this);
                        listView.setAdapter(myAdapter4);

                        //for navigation click

                        listView.setOnItemClickListener(new DrawerItemClickListener());

                        //Navigation Bar starts

                        drawerListener = new ActionBarDrawerToggle
                       (this, drawerLayout, R.drawable.ic_drawer, 
                                    R.string.drawer_open, R.string.drawer_close)
                        {

                            public void onDrawerClosed(View drawerView)
                            {
                                super.onDrawerClosed(drawerView);
                            }

                            public void onDrawerOpened(View drawerView)
                            {
                                super.onDrawerOpened(drawerView);
                            }
                        };

                            drawerLayout.setDrawerListener(drawerListener);
                            getSupportActionBar().setHomeButtonEnabled(true);
                            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            }

My navigation drawer Code


Solution

  • Check below is a sample code for getting Hamburger styled navigation drawer

    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.support.v7.app.AppCompatActivity;
    
        public class MainActivity extends AppCompatActivity{
        DrawerLayout drawerLayout;
        ActionBarDrawerToggle toggle;
        private ArrayList<DrawerItem> drawerItems = new ArrayList<>();
        private ListView mDrawerList;
        private DrawerListAdapter mAdapter;
    
    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mDrawerList = (ListView)findViewById(R.id.left_drawer_list);
        addDrawerItems();
    
    /**Drawer Initialization*/
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        toggle = new ActionBarDrawerToggle
                (
                        this,
                        drawerLayout,
                        R.string.navigation_drawer_open,
                        R.string.navigation_drawer_close
                )
        {
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getSupportActionBar().hide();
            }
    
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getSupportActionBar().show();
            }
        };
        drawerLayout.setDrawerListener(toggle);
        toggle.syncState();
    }
    
     private void addDrawerItems() {
        drawerItems.add(new DrawerItem("ALL"));
        drawerItems.add(new DrawerItem("FAVOURITES"));
        drawerItems.add(new DrawerItem("FILTERS"));
        drawerItems.add(new DrawerItem("SETTINGS"));
    
         DrawerListAdapter adapter = new DrawerListAdapter(this, drawerItems);
                mDrawerList.setAdapter(adapter);
                mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                    ///Write your listener here
    
                }});
            }
    }
    

    Check the import to know the libraries that i have.

    My v7 library version number compile 'com.android.support:appcompat-v7:22.1.1'

    UPDATE: Add below to your strings.xml

    <string name="navigation_drawer_open">Open navigation drawer</string>
    <string name="navigation_drawer_close">Close navigation drawer</string>