Android FloatingActionButton Hide/Show On Page Change -


i have tabbed layout, using smarttablayout, floatingactionbutton in bottom right corner. when transition page hide floatingactionbutton, make reappear different color , different icon. when call hide() method, change icon, call show() method hide() method hasn't finished it's animation before show() called resulting in floatingactionbutton not reappearing.

why doing this? according material design floating action buttons found here, should follow these 2 rules when dealing tabbed layouts:

  1. if there floating action button on multiple lateral screens (such on tabs), upon entering each screen, button should show , hide if action contained on each different. if action same, button should stay on screen (and translate new position, if necessary.)
  2. for tabbed screens, floating action button should not exit screen in same direction screen exits. doing creates visual noise. cause nonfunctional floating action button appear on screen. furthermore, incorrectly implies floating action button @ same z-level content, rather @ level of primary ui elements @ root level.

my first thought have 1 floatingactionbutton , change it's color , behavior whichever page i'm on. works great sans disappearing act. tried adding floatingactionbutton each page fragment, i'm getting undesired result of floatingactionbutton swiping away page (the no-no #2).

so, 1 floatingactionbutton.

one other thing i've tried:

  1. i've tried putting in async task first calls hide(), changes floatingactionbutton color, waits 250 milliseconds, calls show(). seems hacky, worked when swiping between pages. didn't work when clicking tabs button.

so, if point me in correct direction, appreciated.

current code:

    hometabbar bar = new hometabbar();     viewgroup tab = (viewgroup) findviewbyid(r.id.container);     tab.addview(layoutinflater.from(this).inflate( r.layout.demo_custom_tab_icons1 , tab, false));      mviewpager = (viewpager) findviewbyid(r.id.viewpager);     smarttablayout viewpagertab = (smarttablayout) findviewbyid(r.id.viewpagertab);     final viewgroup view = (viewgroup) findviewbyid(android.r.id.content);     viewpagertab.setonpagechangelistener(new viewpager.onpagechangelistener() {          private int currentpage;          @override         public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) {         }          @override         public void onpageselected(int position) {             currentpage = position;         }          @override         public void onpagescrollstatechanged(int state) {             int colorindex = color.red;             mfab.hide();             switch (currentpage) {                 case 0:                     colorindex = color.red;                     mfab.setimagedrawable(getresources().getdrawable(r.drawable.plus_sign));                     mfab.show();                     break;                 case 2:                     colorindex = color.argb(255, 76, 175, 80);                     mfab.setimagedrawable(getresources().getdrawable(r.drawable.ic_add_bowling_ball_white_24dp));                     mfab.show();                     break;                 case 3: colorindex = color.blue;                     mfab.setimagedrawable(getresources().getdrawable(r.drawable.ic_add_location_white_24dp));                     mfab.show();                     break;                 default: // leaves fab hidden on other tabs                     break;             }             mfab.setbackgroundtintlist(colorstatelist.valueof(colorindex));         }     });      bar.setup(viewpagertab);      fragmentpageritems pages = new fragmentpageritems(this);     (integer title : bar.tabs()) {         switch( title ) {             case r.string.player_fragment_tag:                 pages.add(fragmentpageritem.of(getstring(title), playerfragment.class));                 break;             case r.string.series_fragment_tag:                 pages.add(fragmentpageritem.of( getstring( title ), seriesfragment.class));                 break;             case r.string.balls_fragment_tag:                 pages.add(fragmentpageritem.of( getstring( title ), ballsfragment.class));                 break;             case r.string.location_fragment_tag:                 pages.add(fragmentpageritem.of( getstring( title ), bowlingalleyfragment.class));                 break;             default:                 break;         }      }      fragmentpageritemadapter adapter = new fragmentpageritemadapter(             getsupportfragmentmanager(), pages){         @override         public int getitemposition(object object) {             return position_none;         }     };      mviewpager.setadapter(adapter);     viewpagertab.setviewpager(mviewpager);      mtoolbar = (toolbar) findviewbyid(r.id.toolbar_actionbar);     setsupportactionbar(mtoolbar); 

i had similar problem. wanted show snackbar, after fab has appeared. solved this:

floatingactionbutton fab = (floatingactionbutton) findviewbyid(r.id.fab);  floatingactionbutton.onvisibilitychangedlistener fablistener;  fablistener = new floatingactionbutton.onvisibilitychangedlistener(){   @override   public void onshown(floatingactionbutton fab) {      snackbar.make(fab, "replace own action", snackbar.length_long)     .setaction("action", null).show();      super.onshown(fab);   } };  fab.show(fablistener); 

i think need use fab.hide(fablistener) , the onhidden() method calls fab.show() after changed color.

greetings


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -