2011-08-07 11 views
123

Jak prawidłowo używać flagi Intent FLAG_ACTIVITY_NO_ANIMATION w pliku AndroidManifest? Założę się, że mój problem jest banalny, ale nie mogę znaleźć dobrego przykładu lub rozwiązania tego problemu.czynności przełączania bez animacji

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

Jednak żaden błąd jest zgłaszane przez compliator, ale data nie jest poprawna. Po prostu chcę wyłączyć animację w przypadku przełączania między działaniami. Mogę użyć getWindow().setWindowAnimations(0); w onCreate lub onResume, ale użycie flagi jest lepszym rozwiązaniem, prawda?

można używać również w kodzie:

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

Ale chcę używać tej flagi w Android oczywisty. Aby wyłączyć animację również w przypadku powrotu z drugiej aktywności do pierwszej.

+0

Znalazłem sugestię użycia motywu - definiując enter, wyjdź z animacji dla działań lub całej aplikacji. Czy ktoś może mi podać więcej informacji na ten temat? – woyaru

Odpowiedz

212

Można tworzyć styl,

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

i ustawić go jako temat dla swojej działalności w manifeście:

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

Można również zdefiniować styl, aby określić niestandardowe animacje wejścia i wyjścia. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation

+0

Dzięki temu działa świetnie, zwłaszcza w przypadku działań o charakterze przezroczystym/dialogowym, które są wykluczone z ostatnich czasów z innym powinowactwem zadań. Bez tego animacja ciągle pokazywała się tworząc bardzo dziwne wyniki dla otwierania okna dialogowego! – 3c71

+0

to już nie działa dla Lollipop/Android 5.0? – kenyee

+0

Mam Androida 5 i działa dla mnie. Moja aplikacja styl wygląda następująco: nie – eatyourgreens

134

Jeśli kontekst jest działalnością można nazwać overridePendingTransition:

Zadzwoń natychmiast po jednej ze smakami startActivity (intent) lub sam określić wyraźne animację przejścia do wykonania następnego.

Więc programowo:

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

czy można to zrobić również za pomocą adb? –

21

Spróbuj tego kodu,

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

To naprawdę pomaga przy rozpoczynaniu działalności od serwisu. – DearDhruv

16

Można też po prostu zrobić to we wszystkich działaniach, które nie chcesz przechodzić od:

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

Podoba mi się to podejście, ponieważ nie musisz zadzierać dowcipem h styl twojej aktywności.

+0

Świetna rada. Zastanawiam się, jak wyłączyć animację, która zdarza się, gdy *** najpierw uruchamia aplikację ** ... czy jest jakiś sposób?! – Fattie

0

stworzyć swój własny styl nadrzędny androida: Temat

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

następnie używać go w manifeście tak:

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

Oto rozwiązanie jednego-liner, który działa na jak najniższym minSdkVersion 14 którego należy wstawić w was res/styles.xml:

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

tak:

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

Pozdrawiam!

Powiązane problemy