Как справиться с переходом в ночной режим?

Мы внедрили ночной режим в наше приложение. это работает как шарм, за исключением его перехода. Мы используем класс базового приложения для его реализации. Проблема в том, что, что бы мы ни пытались, мы не смогли добиться плавного перехода при изменении конфигурации.

Мы постарались реализовать анимацию входа и выхода в нашем стиле. Но это относится ко всей деятельности. Таким образом, это также влияет на другие переходы активности. Так что это не сработало.

Как видно из изображения, при изменении конфигурации на экране появляется черное мерцание.

введите здесь описание изображения

Код изменения конфигурации:

   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;
        }
    }
}

Спасибо, что прочитали это. Любая помощь приветствуется.


person Eren Tüfekçi    schedule 24.04.2020    source источник
comment
Есть ли у вас какое-либо решение для этого, если да, пожалуйста, дайте мне знать. Я также сталкиваюсь с той же проблемой.   -  person Dheeraj Singh Bhadoria    schedule 07.07.2020
comment
Я не смог найти решение для плавного перехода. Если вы найдете, пожалуйста, поделитесь результатами :)   -  person Eren Tüfekçi    schedule 07.07.2020


Ответы (2)


Пожалуйста, используйте следующий код, он работает отлично -

//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>

я проверял, работает

person Dheeraj Singh Bhadoria    schedule 07.07.2020
comment
На Android 11 вообще не работает, он просто меняет темный режим без какого-либо перехода. - person Shadow; 05.04.2021

Добавьте следующий код после установки темы, у меня работает

Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
person Gaurav Dureja    schedule 14.07.2021