Comment utiliser correctement l'indicateur d'intention FLAG_ACTIVITY_NO_ANIMATION
dans le fichier AndroidManifest? Je suppose que mon problème est trivial, mais je ne trouve pas de bon exemple ni de solution.
<intent-filter>
<data Android:name="Android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
</intent-filter>
Cependant, aucune erreur n'est signalée par le compliateur, mais data
n'est pas correct. Je veux juste désactiver l'animation en cas de changement d'activité. Je peux utiliser plutôt getWindow().setWindowAnimations(0);
dans onCreate ou onResume, mais utiliser flag est préférable, n'est-ce pas?
Je peux aussi utiliser dans le code:
Intent intent = new Intent(v.getContext(), newactivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
getContext().startActivity(intent);
Mais je veux utiliser ce drapeau dans Android Manifest. Désactiver l'animation aussi dans le cas où on revient de la deuxième activité à la première.
Vous pouvez créer un style,
<style name="noAnimTheme" parent="Android:Theme">
<item name="Android:windowAnimationStyle">@null</item>
</style>
et le définir comme thème pour votre activité dans le manifeste:
<activity Android:name=".ui.ArticlesActivity" Android:theme="@style/noAnimTheme">
</activity>
Vous pouvez également définir un style pour spécifier des animations d'entrée et de sortie personnalisées. http://developer.Android.com/reference/Android/R.attr.html#windowEnterAnimation
Si votre contexte est une activité, vous pouvez appeler overridePendingTransition:
Appelez immédiatement après l’une des variantes de startActivity (Intent) ou finissez de spécifier une animation de transition explicite à exécuter ensuite.
Donc, par programme:
this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
Essayez ce code,
this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
Vous pouvez également le faire dans toutes les activités dont vous ne voulez pas faire la transition:
@Override
public void onPause() {
super.onPause();
overridePendingTransition(0, 0);
}
J'aime cette approche car vous ne devez pas vous mêler du style de votre activité.
Ce n'est pas un exemple d'utilisation ni une explication de la façon d'utiliser FLAG_ACTIVITY_NO_ANIMATION
, mais il explique comment désactiver l'animation Activity
, comme indiqué dans le titre de la question:
Android, comment désactiver l’effet "Effacement" lors du démarrage d’une nouvelle activité?
Voici une solution one-line qui fonctionne pour aussi peu que minSdkVersion 14
que vous devriez insérer en vous res/styles.xml
:
<item name="Android:windowAnimationStyle">@null</item>
ainsi:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="Android:windowAnimationStyle">@null</item>
</style>
...
</resources>
À votre santé!
créez votre propre style en remplaçant Android: Theme
<style name="noAnimationStyle" parent="Android:Theme">
<item name="Android:windowAnimationStyle">@null</item>
</style>
Puis utilisez-le dans manifest comme ceci:
<activity Android:name=".MainActivity"
Android:theme="@style/noAnimationStyle">
</activity>
La ligne dans le style de thème fonctionne bien, mais cela remplace l'animation par un écran blanc. Surtout sur un téléphone plus lent - c'est vraiment énervant. Donc, si vous voulez une transition instantanée, vous pouvez l’utiliser dans le style du thème:
<item name="Android:windowAnimationStyle">@null</item>
<item name="Android:windowDisablePreview">true</item>