导航回来时,Android工具栏变得半透明

Jus*_*ard 3 android android-appcompat android-toolbar

示例项目说明问题

https://github.com/justincpollard/TransparentToolbarExample

背景

我们有Activity/ Fragment组合用于在我们的应用程序中显示内容.我们的用户能够在多个内容之间导航,这些内容基本上将这些Activity/ Fragment组合放在另一个上面.点击硬件后退按钮或向上按钮只会显示前一段内容.

以下引用示例项目

当用户正在查看一段内容时,工具栏(android.support.v7.widget.Toolbar)及其文本将开始透明.我们这样完成:

public void onCreateView(...) {
    ...
    toolbar = (Toolbar) v.findViewById(R.id.toolbar);
    ...
    actionBarDrawable = toolbar.getBackground();
    actionBarDrawable.setAlpha(0);
    actionBarText.setTextColor(Color.argb(0, 255, 255, 255));
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果用户滚动浏览页面上的某个点,例如滚动等于工具栏高度的数量,我们会将工具栏背景和文本的alpha设置为0到255的动画,从根本上显示工具栏:

private void animateToolbar(final int start, final int finish) {
    toolbarIsAnimating = true;
    ValueAnimator animator = ValueAnimator.ofInt(start, finish);
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animation) {
         toolbarAlpha = (int) animation.getAnimatedValue();
         actionBarDrawable.setAlpha(toolbarAlpha);
         actionBarText.setTextColor(Color.argb(toolbarAlpha, 255, 255, 255));
        if(toolbarAlpha == finish) {
          toolbarIsAnimating = false;
        }
       }
    });
    animator.setInterpolator(new DecelerateInterpolator());
    animator.setDuration(300);
    animator.start();
}
Run Code Online (Sandbox Code Playgroud)

问题

当用户在滚动超过阈值点(即工具栏背景已被动画化为视图)之后从原始内容片段导航到另一片内容时,向后/向上按下显示原始Activity/ Fragment组合,但工具栏完全透明.

要在示例项目中进行说明,请构建并打开应用程序,滚动到页面底部,然后按"更多内容"按钮.导航到第二个后Activity,按后退按钮.请注意,工具栏是透明的,但标题文本仍然可见.

以前有人见过这个问题吗?我只在Android 5. +上看过它,但随着5. +的采用继续增长,这将成为一个更大的问题.

谢谢你的帮助!

Gus*_*ter 5

找到解决方案:

代替

toolbar.getBackground().setAlpha();
Run Code Online (Sandbox Code Playgroud)

你需要使用

toolbar.getBackground().mutate().setAlpha();
Run Code Online (Sandbox Code Playgroud)

显然,drawables默认情况下彼此共享状态,调用mutate()会使这个特定的drawable不共享状态.