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

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -