【发布时间】:2017-06-11 18:18:20
【问题描述】:
我制作了一个服务器目录浏览应用程序,它可以更改Activity 本身的内容。我一直在添加一个功能:Navigation Drawer 并处理Toolbar 上的 Hamburger 和 Back 图标,如下所示:
- 主目录:
- 默认状态为汉堡图标。
- 将在单击汉堡包或滑动手势时滑动导航抽屉。
- 无状态改变或滑动抽屉时汉堡包的动画。
- 选择目录时Hamburger to Back 图标的动画。
- 任何子目录:
- 上一个动画的后退按钮,其唯一目的是转到父目录。
- 会以滑动手势滑动导航抽屉。
- 当抽屉通过手势滑动或进入该目录的另一个子目录时,无状态改变或后退图标动画。
- 使用返回图标或
onBackPressed返回主目录时的返回箭头到汉堡图标的动画。
我可以使用this answer 获得汉堡到后退图标的动画(代码逐字使用如下)但是当回到主目录时无法再次获得汉堡图标(没有包含该代码并采用另一种方法,即下一部分):
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
mDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
// You can change this duration to more closely match that of the default animation.
anim.setDuration(500);
anim.start();
为了在从主目录和子目录来回浏览时在汉堡包和后退图标之间进行适当的切换,我使用了this answer(代码如下)作为参考,并且能够成功实现1, 2和3主目录和子目录的特征。
private void enableViews(boolean enable) {
if(enable) {
mDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true); // comment this line of code
if(!mToolBarNavigationListenerIsRegistered) {
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Doesn't have to be onBackPressed
onBackPressed();
}
});
mToolBarNavigationListenerIsRegistered = true;
}
}
else {
// Remove back button
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setHomeButtonEnabled(false); // comment this line of code
// Show hamburger
mDrawerToggle.setDrawerIndicatorEnabled(true);
// Remove the/any drawer toggle listener
mDrawerToggle.setToolbarNavigationClickListener(null);
mToolBarNavigationListenerIsRegistered = false;
}
}
来到手头的问题是:在浏览目录时,从汉堡包到返回图标来回切换,动画部分根本不起作用。但是两个图标的状态以及它们的功能都成功地改变了。如果您需要更多信息以进行故障排除,请告诉我。
【问题讨论】:
-
您是开始一个新的活动来显示子目录还是与新片段相同的活动?
-
@Dibzmania 相同的活动。我只是在上面更新了 GridView(带有图像 + 文本的自定义),我没有在这个项目中使用任何类型的 Fragment。我只是将 Internet 上的片段加上有用的文档放在一起,并在了解解决方案并将其更新到我的要求后使其工作。不过,我刚刚解决了它,并且我已经更新了答案以供将来参考。
标签: java android toolbar hamburger-menu