Android
Motyw DayNight (AppCompat v23.2 / API 14+)
Szukaj…
Dodawanie motywu DayNight do aplikacji
Motyw DayNight daje aplikacji fajną możliwość przełączania schematów kolorów na podstawie pory dnia i ostatniej znanej lokalizacji urządzenia.
Dodaj następujące elementy do 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>
Motywy, które możesz rozszerzyć, aby dodać możliwość przełączania motywów dnia i nocy, są następujące:
-
"Theme.AppCompat.DayNight"
-
"Theme.AppCompat.DayNight.NoActionBar"
-
"Theme.AppCompat.DayNight.DarkActionBar"
Oprócz colorPrimary
, colorPrimaryDark
i colorAccent
możesz także dodać dowolne inne kolory, które chcesz zmienić, np. textColorPrimary
lub textColorSecondary
. Możesz również dodać niestandardowe kolory aplikacji do tego style
.
Aby przełączanie motywów działało, musisz zdefiniować domyślny colors.xml
w katalogu res/values
i inny colors.xml
w katalogu res/values-night
oraz odpowiednio zdefiniować kolory dnia / nocy.
Aby przełączyć motyw, wywołaj AppCompatDelegate.setDefaultNightMode(int)
z kodu Java. (Spowoduje to zmianę schematu kolorów całej aplikacji, a nie tylko jednego działania lub fragmentu.) Na przykład:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
Możesz przekazać dowolne z następujących trzech zgodnie z własnym wyborem:
-
AppCompatDelegate.MODE_NIGHT_NO
: ustawia domyślny motyw aplikacji i przyjmuje kolory zdefiniowane w katalogures/values
. W tym temacie zaleca się stosowanie jasnych kolorów. -
AppCompatDelegate.MODE_NIGHT_YES
: ustawia motyw nocny dla Twojej aplikacji i przyjmuje kolory zdefiniowane w katalogures/values-night
. W tym temacie zaleca się stosowanie ciemnych kolorów. -
AppCompatDelegate.MODE_NIGHT_AUTO
: to auto przełącza kolory aplikacji na podstawie pory dnia i kolorów zdefiniowanych wvalues
i katalogachvalues-night
.
Możliwe jest również uzyskanie bieżącego stanu trybu nocnego za pomocą metody getDefaultNightMode()
. Na przykład:
int modeType = AppCompatDelegate.getDefaultNightMode();
Pamiętaj jednak, że zmiana motywu nie utrzyma się, jeśli zabijesz aplikację i otworzysz ją ponownie. Jeśli to zrobisz, motyw wróci do AppCompatDelegate.MODE_NIGHT_AUTO
, co jest wartością domyślną. Jeśli chcesz, aby przełącznik motywu trwał, upewnij się, że przechowujesz wartość we wspólnych preferencjach i ładujesz zapisaną wartość za każdym razem, gdy aplikacja jest otwierana po jej zniszczeniu.