如何在Android中切换没有动画的活动?
Posted
技术标签:
【中文标题】如何在Android中切换没有动画的活动?【英文标题】:How to switch activity without animation in Android? 【发布时间】:2011-10-21 18:51:52 【问题描述】:如何在 androidManifest 文件中正确使用 Intent 标志 FLAG_ACTIVITY_NO_ANIMATION
?我想我的问题是微不足道的,但我找不到好的例子或解决方案。
<intent-filter>
<data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
</intent-filter>
但是编译器没有报告错误,但data
不正确。
我只想禁用动画以防在活动之间切换。我可以在 onCreate 或 onResume 中使用getWindow().setWindowAnimations(0);
,但使用标志是更好的方法,不是吗?
我也可以在代码中使用:
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
【讨论】:
谢谢,这非常适用于透明/对话主题的活动,这些活动被排除在具有不同任务亲和力的近期活动之外。如果没有这个,动画会一直显示为正在打开的对话框创建非常奇怪的结果! 这似乎不再适用于 Lollipop/Android 5.0? 我有 Android 5,它适用于我。我的应用样式如下所示: 在 6.0 中也能完美运行。一个很好的提示。正如我在下面问的那样,我想知道如何禁用 *首次启动应用程序时发生的动画......有没有办法?! 如果你扩展 AppCompatActivity 会崩溃【参考方案2】:如果您的上下文是一个活动,您可以调用 overridePendingTransition:
在 startActivity(Intent) 或其中一种风格之后立即调用 finish 指定下一个要执行的显式过渡动画。
所以,以编程方式:
this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
【讨论】:
也可以通过 adb 来实现吗? @TalAngeloverridePendingTransition
是在 API 级别 5 中添加的。所以不,它不适用于“每个”Android 版本,但我猜你的目标 API 级别高于 5。【参考方案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);
我喜欢这种方法,因为您不必弄乱活动的风格。
【讨论】:
一个很好的提示。我想知道如何禁用 *首次启动应用程序时发生的动画 ...有没有办法?! @Fattie 覆盖启动活动的 onStart() 方法并在其中放置相同的代码。【参考方案5】:主题样式中的线条效果很好,但是用白屏替换了动画。特别是在速度较慢的手机上 - 这真的很烦人。 因此,如果您想要即时过渡 - 您可以在主题样式中使用它:
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>
【讨论】:
【参考方案6】:这是一个单行解决方案,适用于低至 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】:这不是使用示例或说明如何使用FLAG_ACTIVITY_NO_ANIMATION
,但它确实回答了如何禁用Activity
切换动画,如问题标题中所述:
Android, how to disable the 'wipe' effect when starting a new activity?
【讨论】:
【参考方案8】:启动意图后,您可以使用此代码:
Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
如果使用,意图将在没有动画或过渡的情况下工作
【讨论】:
【参考方案9】:创建您自己的覆盖 android:Theme 的样式
<style name="noAnimationStyle" parent="android:Theme">
<item name="android:windowAnimationStyle">@null</item>
</style>
然后像这样在清单中使用它:
<activity android:name=".MainActivity"
android:theme="@style/noAnimationStyle">
</activity>
【讨论】:
以上是关于如何在Android中切换没有动画的活动?的主要内容,如果未能解决你的问题,请参考以下文章
使用Material Design在Android Lollipop中的ListView中的活动过渡动画