How to change drawer toggle icon on Android apps? -
i have created drawer toggle on android app. shown on top-left of screen. when click toggle, list view items shown on left side. below screen home screen:
when click toggle, shown below:
now want change icon of toggle button below code:
mdrawertoggle.sethomeasupindicator(r.drawable.ic_drawer); mdrawertoggle.setdrawerindicatorenabled(false);
the toggle icon changed drawable listview items not shown when click toggle. wonder why changing toggle icon disable toggle click.
below activity class:
public class mainactivity extends appcompatactivity { private drawerlayout mdrawerlayout; private listview mdrawerlist; private actionbardrawertoggle mdrawertoggle; private string[] mplanettitles; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); getsupportactionbar().setdisplayhomeasupenabled(true); getsupportactionbar().sethomebuttonenabled(true); getsupportactionbar().setdisplayshowtitleenabled(false); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.left_drawer); mplanettitles = getresources().getstringarray(r.array.planets_array); // set adapter list view mdrawerlist.setadapter(new arrayadapter<string>(this, r.layout.drawer_list_item, mplanettitles)); mdrawerlist.setonitemclicklistener(new draweritemclicklistener()); mdrawertoggle = new actionbardrawertoggle( this, /* host activity */ mdrawerlayout, r.string.drawer_open, /* "open drawer" description accessibility */ r.string.drawer_close /* "close drawer" description accessibility */ ) { public void ondrawerclosed(view view) { invalidateoptionsmenu(); // creates call onprepareoptionsmenu() } public void ondraweropened(view drawerview) { invalidateoptionsmenu(); // creates call onprepareoptionsmenu() } }; mdrawertoggle.sethomeasupindicator(r.drawable.ic_drawer); // mdrawertoggle.setdrawerindicatorenabled(false); mdrawerlayout.adddrawerlistener(mdrawertoggle); } @override public boolean onoptionsitemselected(menuitem item) { if(mdrawertoggle.onoptionsitemselected(item)) { return true; } return super.onoptionsitemselected(item); } @override protected void onpostcreate(bundle savedinstancestate) { super.onpostcreate(savedinstancestate); // sync toggle state after onrestoreinstancestate has occurred. mdrawertoggle.syncstate(); } @override public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); // pass configuration change drawer toggls mdrawertoggle.onconfigurationchanged(newconfig); } /* click listner listview in navigation drawer */ private class draweritemclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { } } }
the v7 actionbardrawertoggle
2 things: opens/closes drawer, , provides hamburger icon , animation. calling setdrawerindicatorenabled(false)
remove icon, disables toggle. if don't want icon, you're better off not using actionbardrawertoggle
, , handling opening/closing drawer yourself.
- first, remove of code
actionbardrawertoggle
. - then set desired icon
getsupportactionbar().sethomeasupindicator()
. - in
onoptionsitemselected()
, ifmenuitem
's idandroid.r.id.home
, open or close drawer appropriate. - lastly,
drawerlayout.drawerlistener
functionality ofactionbardrawertoggle
can replaced basicsimpledrawerlistener
.
public class mainactivity extends appcompatactivity { private drawerlayout mdrawerlayout; private listview mdrawerlist; private string[] mplanettitles; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); getsupportactionbar().setdisplayhomeasupenabled(true); getsupportactionbar().setdisplayshowtitleenabled(false); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.left_drawer); mplanettitles = getresources().getstringarray(r.array.planets_array); // set adapter list view mdrawerlist.setadapter(new arrayadapter<string>(this, r.layout.drawer_list_item, mplanettitles)); mdrawerlist.setonitemclicklistener(new draweritemclicklistener()); // *** set desired icon getsupportactionbar().sethomeasupindicator(r.drawable.ic_drawer); // *** replace drawerlistener functionality of actionbardrawertoggle mdrawerlayout.adddrawerlistener(new drawerlayout.simpledrawerlistener() { @override public void ondrawerclosed(view view) { invalidateoptionsmenu(); // creates call onprepareoptionsmenu() } @override public void ondraweropened(view drawerview) { invalidateoptionsmenu(); // creates call onprepareoptionsmenu() } } ); } @override public boolean onoptionsitemselected(menuitem item) { // *** if home button clicked, open/close drawer needed if (item.getitemid() == android.r.id.home) { if (mdrawerlayout.isdraweropen(gravitycompat.start)) { mdrawerlayout.closedrawer(gravitycompat.start); } else { mdrawerlayout.opendrawer(gravitycompat.start); } return true; } return super.onoptionsitemselected(item); } @override protected void onpostcreate(bundle savedinstancestate) { super.onpostcreate(savedinstancestate); } @override public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); } /* click listner listview in navigation drawer */ private class draweritemclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { } } }
Comments
Post a Comment