Mat*_*ree 6 android android-appcompat navigation-drawer drawertoggle android-5.0-lollipop
我目前正在更新Fragment为导向的应用程序(我有一个Activity用FrameLayout容器作为主机为我所有Fragment或多个)材料设计.我想在替换时将汉堡图标设置为后箭头的动画Fragment.
基本上,如果这个不够清楚,这就是我想要实现的目标.我不想使用这个库(MaterialMenu),我想使用官方的AppCompatlib来扩展可能.
由于这个解决方案,我实现了这个效果,但我无法弄清楚如何在更换ActionBarDrawerToggle时作为后退按钮Fragment.
所以我的问题是:如果后面的箭头图标仍然是替换ActionBarDrawerToggle后的那个图标Fragement吗?在这种情况下,我如何覆盖它,以便它的作用onBackPressed()而不是打开抽屉?我已经尝试了这个,但它不起作用:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
getActivity().onBackPressed();
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
如果你手动打开它,我认为在抽屉里面跟踪更清洁.这就是我最终做的事情:
public class ManualActionBarDrawerToggle extends ActionBarDrawerToggle {
private static final float MENU_POSITION = 0f;
private static final float ARROW_POSITION = 1.0f;
private final int animationLength;
private final DrawerLayout drawerLayout;
private final Activity activity;
private State currentState;
private enum State { UP_ARROW, MENU }
public ManualActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescriptionResource, int closeDrawerContentDescriptionResource) {
super(activity, drawerLayout, openDrawerContentDescriptionResource, closeDrawerContentDescriptionResource);
animationLength = activity.getResources().getInteger(android.R.integer.config_shortAnimTime);
this.drawerLayout = drawerLayout;
this.activity = activity;
currentState = State.MENU;
}
public void animateToBackArrow() {
ValueAnimator anim = ValueAnimator.ofFloat(MENU_POSITION, ARROW_POSITION);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
onDrawerSlide(drawerLayout, slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
anim.setDuration(animationLength);
anim.start();
currentState = State.UP_ARROW;
}
public void animateToMenu() {
ValueAnimator anim = ValueAnimator.ofFloat(ARROW_POSITION, MENU_POSITION);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
onDrawerSlide(drawerLayout, slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
anim.setDuration(animationLength);
anim.start();
currentState = State.MENU;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case (android.R.id.home):
if (currentState == State.UP_ARROW) {
activity.onBackPressed();
return true;
}
}
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
该库的可绘制菜单有一个可以对状态进行动画处理的方法:
如果您想从 切换到Burger,Arrow请拨打以下电话:
mMaterialMenu.animateState(IconState.ARROW);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3333 次 |
| 最近记录: |