You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android SDK34+如何实现语言切换重启Activity无过渡动画?

解决SDK 34+中Activity重启无动画过渡的问题

针对你遇到的overridePendingTransition废弃后替换方法无效的问题,提供以下几种可行方案:

方案一:结合Intent标志位与overrideActivityTransition

调整调用时机,同时禁用默认动画标志位,确保覆盖打开和关闭两个过渡阶段:

private void saveLang(String lng) {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    sharedPreferences.edit().putString("norsegods_langx", lng).apply();

    Intent i = new Intent(MainActivity.this, MainActivity.class);
    // 禁用系统默认的Activity切换动画
    i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
        // 覆盖新Activity打开时的过渡动画
        overrideActivityTransition(Activity.OVERRIDE_TRANSITION_OPEN, 0, 0);
        startActivity(i);
        // 覆盖当前Activity关闭时的过渡动画
        overrideActivityTransition(Activity.OVERRIDE_TRANSITION_CLOSE, 0, 0);
        finish();
    } else {
        startActivity(i);
        finish();
        overridePendingTransition(0, 0);
    }
}

方案二:使用ActivityOptions自定义动画

这种方法兼容全版本,无需区分SDK等级,代码更简洁:

private void saveLang(String lng) {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    sharedPreferences.edit().putString("norsegods_langx", lng).apply();

    Intent i = new Intent(MainActivity.this, MainActivity.class);
    // 创建无动画的ActivityOptions
    ActivityOptions options = ActivityOptions.makeCustomAnimation(this, 0, 0);
    startActivity(i, options.toBundle());
    finish();
    // 旧版本仍可保留overridePendingTransition做双重保障,或直接省略
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
        overridePendingTransition(0, 0);
    }
}

方案三:在主题中全局禁用Activity过渡动画(可选)

如果你的应用中多处需要无动画切换,可在Activity主题中添加以下属性:

<style name="AppTheme.NoAnimation" parent="AppTheme">
    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:activityOpenEnterAnimation">@null</item>
    <item name="android:activityOpenExitAnimation">@null</item>
    <item name="android:activityCloseEnterAnimation">@null</item>
    <item name="android:activityCloseExitAnimation">@null</item>
</style>

然后在Manifest中为MainActivity指定该主题,或在代码中动态设置:

setTheme(R.style.AppTheme_NoAnimation);

注意事项

  • overrideActivityTransition的调用时机很关键,必须在startActivity或finish之前调用,对应指定OVERRIDE_TRANSITION_OPEN或OVERRIDE_TRANSITION_CLOSE。
  • 添加Intent.FLAG_ACTIVITY_NO_ANIMATION可以避免系统默认动画干扰,确保自定义设置生效。

内容的提问来源于stack exchange,提问作者Darksymphony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:55:07