我们在应用程序中实现了夜间模式。除了过渡之外,它的工作原理就像一种魅力。我们正在使用基本应用程序类来实现它。问题是无论我们尝试了什么,当配置更改时我们都无法实现平稳过渡。
我们尝试以我们的样式实现进入和退出动画。但这适用于整个活动。因此,它也会影响活动的其他过渡。所以它没有用。
从图像中可以看到,当配置更改时,屏幕上会出现黑色闪烁。
配置更改代码:
public static void applyTheme(@NonNull String themePref) {
switch (themePref) {
case LIGHT_MODE: {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
Log.d(Statics.LOG_TAG, "Applying day mode");
break;
}
case DARK_MODE: {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
Log.d(Statics.LOG_TAG, "Applying night mode");
break;
}
default: {
Log.d(Statics.LOG_TAG, "Applying automatic mode");
if (BuildCompat.isAtLeastP()) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
}
break;
}
}
}
感谢您阅读本文。任何帮助表示赞赏。
答案 0 :(得分:1)
请使用以下代码,它可以正常工作-
//Does not work in Android Nugget
public void setDayNightMode(boolean day) {
if (day)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
else
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
getWindow().setWindowAnimations(R.style.WindowAnimationFadeInOut);
recreate();
}
//Style
<style name="WindowAnimationFadeInOut">
<item name="@android:windowEnterAnimation">@anim/fade_in</item>
<item name="@android:windowExitAnimation">@anim/fade_out</item>
</style>
// fade in inside anim folder
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="1000"
android:fromAlpha="0"
android:interpolator="@android:anim/decelerate_interpolator"
android:toAlpha="1.0" />
</set>
// fade out inside anim folder
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="1500"
android:fromAlpha="1.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:toAlpha="0" />
</set>
我对其进行了测试
答案 1 :(得分:0)
设置主题后添加以下代码,对我有用
Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);