在AppCompat的第23版中,为ActionMode引入了淡入/淡出动画,但我需要禁用它。
动机:我改变了TabLayout的背景颜色,我无法重现同样的淡入淡出动画,所以它看起来很奇怪。我尝试使用ObjectAnimator,但它不像新的AppCompat v23那样具有正确的“alpha”效果。
根据这里appcompat-v7 v23.0.0 statusbar color black when in ActionMode(来自Mattia的答案),似乎动画是用Java创建的(因此无法覆盖“anim”文件夹中的xml):
mFadeAnim = ViewCompat.animate(mActionModeView).alpha(0f);
有关如何禁用新ActionMode动画的任何想法吗?
在两种颜色之间再现相同的效果对我来说也是另一种选择,但如前所述,它感觉不一样......
谢谢,Andrea
答案 0 :(得分:3)
我遇到了同样的问题。我这样解决了:
1)显示actionmode:我不禁用fadein动画:我只是将actionbar的颜色设置为与actionmode相同的颜色。
2)隐藏动作模式:为了禁用fadingout,我只需在onDestroyActionMode中进行此调用:
findViewById(R.id.action_mode_bar).setVisibility(View.INVISIBLE);
不要忘记在此之后将之前的颜色设置为操作栏。
答案 1 :(得分:0)
我也发现了这个问题,我想提出另一种解决方案:尝试使TabLayout背景颜色更改动画化,与ActionMode同步。
int colorFrom;
int colorTo;
TypedValue colorPrimaryTypedValue = new TypedValue();
TypedValue actionModeBackgroundTypedValue = new TypedValue();
getActivity().getTheme().resolveAttribute(R.attr.colorPrimary, colorPrimaryTypedValue, true);
getActivity().getTheme().resolveAttribute(R.attr.actionModeBackground, actionModeBackgroundTypedValue, true);
if (actionModeVisible) {
colorFrom = colorPrimaryTypedValue.data;
colorTo = actionModeBackgroundTypedValue.data;
} else {
colorFrom = actionModeBackgroundTypedValue.data;
colorTo = colorPrimaryTypedValue.data;
}
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
colorAnimation.setDuration(350); // milliseconds
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
mTabLayout.setBackgroundColor((int) animator.getAnimatedValue());
}
});
colorAnimation.start();
希望这对其他人有帮助!
答案 2 :(得分:0)
自定义视图的解决方案。
@Override
public void onDestroyActionMode(ActionMode mode) {
((View) mode.getCustomView().getParent()).setVisibility(View.INVISIBLE);
}
启动操作模式时,必须将回调实现传递给它。此回调的方法之一是onDestroyActionMode
。在此方法中,您将收到ActionMode的实例。这样,您可以访问在其上设置的自定义视图并隐藏其父容器。