問題
次のトランジションが定義されているアクティビティ A というアクティビティがあります。
@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);
}
アクティビティ A を呼び出すと、すべて正常に動作します。ステータスバーはそのままですが、アプリバーは画面にアニメーション化されます。ただし、 Activity B を介して A を実行すると、slideexit トランジションはステータスバーを尊重しません。ステータス バーは消えますが、アプリバーは固定されたままです (アニメーションから適切に除外されます)。
私が試したこと
slideexit のコードをコメント アウトし、A の入力トランジションのみを保持すると、A から B へのトランジション中、ステータスバーは固定されたままになります。これは、B が呼び出される前に問題が発生したことを証明しています。問題は、A の exittransition にあります。
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か月ほど前にこれが機能していたことをはっきりと覚えているので、これはフレームワークの問題であると強く信じています。
それとも私は何か間違ったことをしていますか?