2011-08-07 8 views
123

¿Cómo puedo usar correctamente el indicador de intención FLAG_ACTIVITY_NO_ANIMATION en el archivo AndroidManifest? Supongo que mi problema es trivial, pero no puedo encontrar un buen ejemplo o solución para él.actividades de conmutación sin animación

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

Sin embargo hay error es reportado por compliator, pero data no es correcto. Solo quiero deshabilitar la animación en caso de cambio de actividades. Puedo usar getWindow().setWindowAnimations(0); en onCreate o onResume, pero usar flag es mejor, ¿no?

puedo usar también en código:

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

Pero quiero usar esta bandera en Android Manifiesto. Para desactivar la animación también en caso de que regrese de la segunda actividad a la primera.

+0

He encontrado la sugestión para usar el tema - definiendo enter, exit animations para actividades o toda la aplicación. ¿Puede alguien darme más información al respecto? – woyaru

Respuesta

212

Puede crear un estilo,

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

y configurarlo como tema para su actividad en el manifiesto:

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

También puede definir un estilo para especificar entradas y salidas de animaciones personalizadas. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation

+0

Gracias, esto funciona muy bien especialmente para las actividades con diálogos transparentes excluidas de recientes con una afinidad de tarea diferente. Sin esto, ¡la animación seguía mostrando resultados muy extraños para que se abriera un diálogo! – 3c71

+0

esto ya no parece funcionar para Lollipop/Android 5.0? – kenyee

+0

Tengo Android 5 y funciona para mí. Mi estilo de aplicación es el siguiente: no – eatyourgreens

134

Si el contexto es una actividad que puede llamar overridePendingTransition:

llamada inmediatamente después de uno de los sabores de startActivity (Intención) o acabado para especificar una animación de transición explícita para llevar a cabo el próximo.

Así, mediante programación:

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

¿es posible hacerlo a través de adb también? –

21

probar este código,

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

Esto realmente ayuda al iniciar la actividad desde el servicio. – DearDhruv

16

También se puede simplemente hacer esto en todas las actividades que usted no quiere hacer la transición de:

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

Me gusta este enfoque porque no tiene que ensuciarse con el ingenio h el estilo de tu actividad.

+0

Un gran consejo. Me pregunto cómo desactivar la animación que ocurre cuando *** primero se inicia una aplicación ** ... ¿hay alguna manera? – Fattie

0

crear su propia primordial estilo androide: Tema

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

A continuación, utilizarlo en el manifiesto de esta manera:

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

Aquí es una solución de una sola línea que trabaja para un precio tan bajo como minSdkVersion 14 que se debe insertar en el que res/styles.xml:

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

este modo:

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

¡Salud!

Cuestiones relacionadas