Как изменить все переходы активности сразу в приложении Android?
Я знаю, что могу изменить переход активности, используя следующий код сразу после startActivity() или finish()
activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);
Но если у меня есть десять действий в моем приложении, я должен сделать это десять раз; и его довольно сложно модифицировать. Поэтому мне интересно, есть ли способ установить переход для всех действий в приложении сразу. Есть ли соответствующая конфигурация в AndroidManifest.xml?
Спасибо!
Ответы
Ответ 1
Вы хотите сначала создать <style>
в res/styles.xml, например:
<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity">
<item name="android:windowEnterAnimation">@anim/your_in_down</item>
<item name="android:windowExitAnimation">@anim/your_out_down</item>
</style>
Затем вы можете применить стиль к теме в том же файле:
<style name="YourTheme" parent="android:Theme.Translucent">
...
<item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item>
</style>
И, наконец, примените тему к вашим действиям в манифесте:
<activity
android:name=".YourActivity"
android:theme="@style/YourTheme" />
Посмотрите на эти ссылки для справки:
Ответ 2
Я знаю, что это ответ, но вот что я сделал в своей жизни. Мы по-прежнему поддерживаем API 14, поэтому некоторые анимации отсутствуют, и мне пришлось втягивать проект из API 22 (slide_in_right, slide_out_left). Это делается для перехода на экраны, когда вы открываете новое действие и перемещаете его слева. Когда вы нажмете назад, он будет делать обратное, сдвигая влево предыдущий экран и закрывая вправо текущий экран.
<style name="YourTheme" parent="android:Theme.Translucent">
...
<item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item>
</style>
<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item>
</style>
Ответ 3
Мое решение в основном похоже на ответ JPM. Но вот какой-то дополнительный файл, который вам может потребоваться.
<!-- Base application theme. -->
<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/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
Создайте папку с файлами под папкой res, а затем создайте четыре файла анимации:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>