工具栏后退buttonfunction

我遇到了工具栏和后退button的问题。 这里是我有的设置:

在这里输入图像说明

当我添加一个细节片段时,如下所示,我为工具条汉堡包设置了animation。 这使汉堡成为一个箭头的animation。

即使在评论部分,用户提到:

这完美的作品。 只需设置start = 0和end = 1从汉堡包到箭头,开始= 1和结束= 0箭头到汉堡包。 有一件事你必须跟踪的是,当箭头显示时抽屉closures。 在这一点上,汉堡最终被显示(因为抽屉的滑动),你必须纠正。

但我无法弄清楚如何让后退箭头正常工作。 当我按下后退箭头时,抽屉打开,细节片段不会popup。 我应该如何去实施呢?

问题

  • 在添加细节片段时,我应该如何为汉堡添加animation? 假设链接的解决scheme不够好。
  • 我如何覆盖后退箭头来执行我所希望的特定function? 像汉堡包一样有弹性,popup堆栈而不打开抽屉。

Solutions Collecting From Web of "工具栏后退buttonfunction"

经过几个小时的search和游戏,我能够build立一个解决scheme,交付每个要求。 来源: 1,2

detailFragmentActive = false; @Override protected void onCreate(Bundle savedInstanceState) { setSupportActionBar(mToolbar); ... mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(detailFragmentActive) { onBackPressed(); //if(displayBackAgain) //return; //return after so you don't call syncState(); }else if (mDrawerLayou.isDrawerOpen(GravityCompat.START)) mDrawerLayout.closeDrawer(GravityCompat.START); else mDrawerLayout.openDrawer(GravityCompat.START); mDrawerToggle.syncState(); } }); } private void animateHamburger(boolean isArrow){ int start = 0, end = 1; if(isArrow){ detailFragmentActive = false; start = 1; end = 0; mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); }else{ detailFragmentActive = true; mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); } ValueAnimator anim = ValueAnimator.ofFloat(start, end); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float slideOffset = (Float) valueAnimator.getAnimatedValue(); mDrawerToggle.onDrawerSlide(mDrawerLayout, slideOffset); } }); anim.setInterpolator(new DecelerateInterpolator()); anim.setDuration(500); anim.start(); } @Override public void onBackPressed() { super.onBackPressed(); animateHamburger(true); } public void onFragmentChange(){ ... animateHamburger(false); } 

您可以为此button设置监听器:

 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (flagDeterminingAction) { drawerLayout.openDrawer(drawerListView); } else { onBackPressed(); //or popbackstack or whatever you are using to going back in navigation } }