问题
我有一个名为 Activity A 的 Activity,它定义了以下转换。
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public static void slideAnimation(Window window) {
//runs when the activity is being entered
//runs in reverse when the activity is being destroyed
Slide slideEnter = new Slide();
slideEnter.setDuration(mShortAnimationDuration);
slideEnter.excludeTarget(android.R.id.statusBarBackground, true);
slideEnter.excludeTarget(R.id.app_bar_layout, false);
window.setEnterTransition(slideEnter);
//runs when the calling activity is exiting
// runs in reverse when the activity is reentering
Slide slideExit = new Slide();
slideExit.setDuration(mShortAnimationDuration);
slideExit.excludeTarget(android.R.id.statusBarBackground, true);
slideExit.excludeTarget(R.id.app_bar_layout, false);
window.setExitTransition(slideExit);
}
当我调用 Activity A 时,一切正常。状态栏保持原样,但应用栏在屏幕上显示动画。但是,当我通过 A 运行 Activity B 时,slideexit 转换不支持状态栏。状态栏消失,但应用栏保持固定(它已正确地从动画中排除)。
我试过的
如果我注释掉slideexit的代码,只在A中保留enter转换,从A到B的转换过程中状态栏保持不变。这证明问题出现在B被调用之前。问题在于 A 的退出转换。
A 的退出转换不排除状态栏并将其移出屏幕。B 只是把它滑回来。
这是我的styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
</style>
这就是我调用我的活动的方式
void transitionTo(Intent i) {
ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(this), null);
getActivity(this).startActivity(i, transitionActivityOptions.toBundle());
}
我在支持库版本 24.2.1 的 HTC 10 上使用 nouget 7.0。我坚信这是一些框架问题,因为我清楚地记得去年可能是 3 个月前左右。
还是我做错了什么?