android - How to make Drawer icon and logo two different button in ActionBar -
i have problem need able click both logo , backarrow+hamburger/cater action bar. when don't have in backstack, hamburger icon displayed , opening left drawer (then via animation changes arrow close drawer).
displaying icon next applogo:
getsupportactionbar().sethomebuttonenabled(true); getsupportactionbar().setdisplayhomeasupenabled(true); i have actionbardrawertoggle check if it's left drawer opened (because have right drawer must not interfere hamburger icon animations).
actionbardrawertoggle
mdrawerlistener = new actionbardrawertoggle(this, drawerlayout, r.string.drawer_open, r.string.drawer_closed) { //must override these methods make left drawer change icon of drawer in corner, when opened @override public void ondrawerslide(view drawerview, float slideoffset) { if (drawerview.getid() == r.id.left_drawer) { super.ondrawerslide(drawerview, slideoffset); } } @override public void ondraweropened(view drawerview) { if (drawerview.getid() == r.id.left_drawer) { super.ondraweropened(drawerview); } } @override public void ondrawerclosed(view drawerview) { if (drawerview.getid() == r.id.left_drawer) { super.ondrawerclosed(drawerview); } } }; drawerlayout.setdrawerlistener(mdrawerlistener); when navigating bask possible, icon changes arrow disabling indicator
onbackstackchanged()
@override public void onbackstackchanged() { // disable drawer icon , leave backarrow icon if backstack not empty boolean canback = getsupportfragmentmanager().getbackstackentrycount() > 0; if (canback) { mdrawerlistener.setdrawerindicatorenabled(false); } else { mdrawerlistener.setdrawerindicatorenabled(true); } } in onoptionsitemselected() take care left drawer (with right 1 closing) or navigateback action made.
onoptionsitemselected()
public boolean onoptionsitemselected(menuitem item) { helper.dismisskeyboard(this); switch (item.getitemid()) { case android.r.id.home: if (getsupportfragmentmanager().getbackstackentrycount() > 0) { onsupportnavigateup(); } else { if (drawerlayout.isdraweropen(drawersports)) { drawerlayout.closedrawer(drawersports); } else { if (drawerlayout.isdraweropen(lvmyaccount)) { drawerlayout.closedrawer(lvmyaccount); } drawerlayout.opendrawer(drawersports); } } return true; styles.xml
<style name="apptheme" parent="theme.appcompat.light.darkactionbar"> <item name="android:actionbarstyle">@style/myactionbar</item> <item name="actionbarstyle">@style/myactionbar</item> </style> <style name="myactionbar" > <item name="android:background">@color/blue</item> <item name="background">@color/blue</item> <item name="android:logo">@drawable/logo_marathon</item> <item name="logo">@drawable/logo_marathon</item> <item name="android:displayoptions">showhome|uselogo</item> <item name="displayoptions">showhome|uselogo</item> </style> ... this not project, might not know how configured, , can't make major changes unless necessary, need add onclick method logo , don't know how . tried <item name="onclick">customlogoclickmethod</item>, didn't help.
create view want on actionbar. set listeners on , set view actionbar getactionbar().setcustomview();
eg:
getactionbar().setdisplayoptions( actionbar.display_show_custom | actionbar.display_use_logo | actionbar.display_show_home | actionbar.display_home_as_up); layoutinflater inflater = (layoutinflater) .getsystemservice(context.layout_inflater_service); // inflate view created before view v = inflater.inflate(r.layout.sample_titlebar, null); //set listeners here view //and getactionbar().setcustomview();
Comments
Post a Comment