Переключение без анимации

Как правильно использовать флаг Intent FLAG_ACTIVITY_NO_ANIMATION в файле AndroidManifest? Я полагаю, что моя проблема тривиальна, но я не могу найти хороший пример или решение для нее.

<intent-filter>
    <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
</intent-filter>

Однако ошибка не сообщается с помощью compliator, но data неверна. Я просто хочу отключить анимацию в случае переключения между действиями. Я могу использовать getWindow().setWindowAnimations(0); в onCreate или onResume, но лучше использовать флаг, не так ли?

Я могу также использовать код:

Intent intent = new Intent(v.getContext(), newactivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
getContext().startActivity(intent);

Но я хочу использовать этот флаг в Android Manifest. Чтобы отключить анимацию, также в случае возврата от второго действия к первому.

Ответ 1

Вы можете создать стиль,

 <style name="noAnimTheme" parent="android:Theme">
   <item name="android:windowAnimationStyle">@null</item>
</style>

и установите его как тему для вашей активности в манифесте:

   <activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
    </activity>

Вы также можете определить стиль для указания пользовательской записи и выхода из анимации. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation

Ответ 2

Если ваш контекст - это действие, вы можете вызвать overridePendingTransition:

Вызовите сразу после одного из вариантов startActivity (Intent) или чтобы указать явную переходную анимацию для выполнения следующей.

Итак, программно:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

Ответ 3

Попробуйте этот код,

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));

Ответ 4

Вы также можете просто сделать это во всех действиях, которые вы не хотите переходить с:

@Override
public void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

Мне нравится этот подход, потому что вам не нужно возиться со стилем вашей деятельности.

Ответ 6

Вот однострочное решение, работающее всего за minSdkVersion 14 которое вы должны вставить в свой minSdkVersion 14 res/styles.xml:

<item name="android:windowAnimationStyle">@null</item>

вот так:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

Ура!

Ответ 7

создать свой собственный стиль, перекрывающий Android: Theme

<style name="noAnimationStyle" parent="android:Theme">
    <item name="android:windowAnimationStyle">@null</item>
</style>

Затем используйте его в манифесте так:

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>

Ответ 8

Линия в стиле темы работает нормально, но при этом анимация заменяется белым экраном. Особенно на более медленном телефоне - это действительно раздражает. Итак, если вы хотите мгновенный переход - вы можете использовать это в стиле темы:

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>