Как изменить все переходы активности сразу в приложении Android? - PullRequest
41 голосов
/ 30 ноября 2011

Я знаю, что могу изменить переход активности, используя следующий код сразу после startActivity () или finish ()

activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);

Но если в моем приложении есть десять действий, я должен сделать это десять раз; и это довольно сложно изменить. Поэтому мне интересно, есть ли способ установить переход для всех действий в приложении одновременно. Есть ли в AndroidManifest.xml соответствующая конфигурация?

Спасибо!

Ответы [ 4 ]

62 голосов
/ 30 ноября 2011

Сначала необходимо создать <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" />

Просмотрите ссылки для справки:

18 голосов
/ 13 августа 2015

Я знаю, что на это ответили, но вот что я сделал в своей. Мы по-прежнему поддерживаем 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>
10 голосов
/ 09 октября 2016

Мое решение в основном похоже на ответ 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>

Создайте папку anim в папке 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>
0 голосов
/ 23 апреля 2019
My solution is mostly like of others...
 <style name="YourAnimation.Activity" parent="@android:style/Animation.Activity">
        <item name="android:windowEnterAnimation">@anim/slidefromright</item>
        <item name="android:windowExitAnimation">@anim/slidetoright</item>
    </style>
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- 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:windowAnimationStyle">@style/YourAnimation.Activity </item>
    </style>


</resources>
...