3

问题

我有一个名为 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 个月前左右。

还是我做错了什么?

4

0 回答 0