Android
Тема DayNight (AppCompat v23.2 / API 14+)
Поиск…
Добавление темы DayNight в приложение
Тема DayNight дает приложению прекрасную возможность переключения цветовых схем на основе времени суток и последнего известного местоположения устройства.
Добавьте в свой styles.xml
:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Темы, которые вы можете продлить, чтобы добавить функцию переключения тем дня ночью, следующие:
-
"Theme.AppCompat.DayNight"
-
"Theme.AppCompat.DayNight.NoActionBar"
-
"Theme.AppCompat.DayNight.DarkActionBar"
Помимо colorPrimary
, colorPrimaryDark
и colorAccent
вы также можете добавить любые другие цвета, которые вы хотели бы переключить, например textColorPrimary
или textColorSecondary
. Вы можете добавить пользовательские цвета вашего приложения в этот style
.
Для переключения темы на работу вам необходимо определить значение по умолчанию colors.xml
в colors.xml
res/values
и еще один colors.xml
в colors.xml
res/values-night
и определить цвета день / ночь соответствующим образом.
Чтобы переключить тему, вызовите метод AppCompatDelegate.setDefaultNightMode(int)
из вашего кода Java. (Это изменит цветовую схему для всего приложения, а не только одну активность или фрагмент.) Например:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
Вы можете передать любой из следующих трех по вашему выбору:
-
AppCompatDelegate.MODE_NIGHT_NO
: это задает тему по умолчанию для вашего приложения и принимает цвета, определенные в каталогеres/values
. Для этой темы рекомендуется использовать светлые цвета. -
AppCompatDelegate.MODE_NIGHT_YES
: это устанавливает ночную тему для вашего приложения и принимает цвета, определенные в каталогеres/values-night
. Для этой темы рекомендуется использовать темные цвета. -
AppCompatDelegate.MODE_NIGHT_AUTO
: этот параметр автоматически переключает цвета приложения в зависимости от времени суток и цветов, которые вы определили в каталогахvalues
иvalues-night
.
Также можно получить текущий статус ночного режима с помощью метода getDefaultNightMode()
. Например:
int modeType = AppCompatDelegate.getDefaultNightMode();
Обратите внимание, однако, что переключатель темы не будет сохраняться, если вы убьете приложение и снова его закроете. Если вы это сделаете, тема вернется к AppCompatDelegate.MODE_NIGHT_AUTO
, который является значением по умолчанию. Если вы хотите, чтобы переключатель темы сохранялся, убедитесь, что вы сохраняете значение в общих настройках и загружаете сохраненное значение каждый раз, когда приложение открывается после его уничтожения.