Android 工具栏后退按钮功能
我的工具栏和后退按钮有问题。以下是我的设置: 当我添加一个细节片段时,我会按照概述的方式设置工具栏汉堡的动画,这会使汉堡变成箭头 即使在评论部分,用户也提到: 这很好用。从汉堡开始,只需设置start=0和end=1即可 指向箭头,对于指向汉堡的箭头,开始=1,结束=0。一件事 你得记着抽屉什么时候关上 箭头显示。在这一点上,汉堡包最终被显示出来 (因为抽屉的滑动),你必须纠正 但我不知道如何让返回箭头正常工作。当我按下后退箭头时,抽屉打开,细节片段不会弹出。我应该如何着手实施这一点 问题Android 工具栏后退按钮功能,android,android-toolbar,Android,Android Toolbar,我的工具栏和后退按钮有问题。以下是我的设置: 当我添加一个细节片段时,我会按照概述的方式设置工具栏汉堡的动画,这会使汉堡变成箭头 即使在评论部分,用户也提到: 这很好用。从汉堡开始,只需设置start=0和end=1即可 指向箭头,对于指向汉堡的箭头,开始=1,结束=0。一件事 你得记着抽屉什么时候关上 箭头显示。在这一点上,汉堡包最终被显示出来 (因为抽屉的滑动),你必须纠正 但我不知道如何让返回箭头正常工作。当我按下后退箭头时,抽屉打开,细节片段不会弹出。我应该如何着手实施这一点 问题
- 添加细节片段时,我应该如何设置汉堡包向后箭头的动画?假设解决方案不够好
- 如何覆盖返回箭头以仅执行所需的特定功能?就像制作汉堡包动画一样,弹出堆栈,而不是打开抽屉
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
}
}
经过几个小时的搜索和游戏,我能够构建一个满足每个需求的解决方案。资料来源:
这是一个很好的问题,+1对你来说,这是正确的,但是一些细节遗漏了。我最终找到了解决方案,请看我的答案。这完美地解决了我的大部分问题。仍然无法正确设置汉堡图标的动画。
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);
}