Ciemny motyw jest dostępny na Androidzie 10 (poziom interfejsu API 29) i nowszych. Zawiera następujące korzyści:
- Znacznie zmniejsza zużycie energii w zależności od technologii ekranów.
- Poprawia widoczność dla użytkowników niedowidzących i wrażliwych na jasnego światła.
- Ułatwia korzystanie z urządzenia przy słabym oświetleniu.
Ciemny motyw dotyczy interfejsu systemu Android i aplikacji uruchomionych na urządzeniu.
Ciemny motyw można włączyć na Androidzie 10 i nowszych wersjach na 3 sposoby:
- Aby użyć ustawienia systemowego, otwórz Ustawienia > Wyświetlacz > motyw, aby włącz ciemny motyw.
- Kafelek Szybkie ustawienia pozwala przełączać motywy z panelu powiadomień gdy ta opcja jest włączona.
- Na urządzeniach Pixel włącz Oszczędzanie baterii, aby jednocześnie włączyć ciemny motyw obecnie się znajdujesz. Inne urządzenia mogą nie obsługiwać tej funkcji.
Instrukcje stosowania ciemnego motywu do treści internetowych za pomocą komponentu WebView przeczytaj artykuł Przyciemnianie treści internetowych w komponencie WebView.
Obsługa ciemnego motywu w aplikacji
Aby obsługiwać ciemny motyw, ustaw motyw aplikacji – zwykle znajduje się on
res/values/styles.xml
– aby dziedziczyć z motywu DayNight
:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
Możesz też użyć ciemnego motywu Material Komponenty motyw:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Łączy główny motyw aplikacji ze kontrolowanymi przez system flagami trybu nocnego ustawia domyślny ciemny motyw, gdy jest włączony.
Motywy i style
Unikaj stosowania na stałe kolorów lub ikon przeznaczonych do użytku z jasnym motywem. Używaj atrybutów motywów lub zasobów kwalifikacji nocnych.
W przypadku ciemnego motywu są najważniejsze 2 atrybuty:
?android:attr/textColorPrimary
: kolor tekstu ogólnego przeznaczenia. Jest niemal czarny w jasnym motywie i prawie biały w ciemnych motywach. Zawiera ona wyłączone.?attr/colorControlNormal
: kolor ikony ogólnego przeznaczenia. Zawiera ona wyłączone.
Zalecamy korzystanie z stylu Material Design.
Komponenty, ponieważ ich motywy kolorystyczne
system, na przykład motyw
?attr/colorSurface
i ?attr/colorOnSurface
, umożliwia łatwy dostęp
na odpowiednie kolory. Możesz dostosować te atrybuty w swoim motywie.
Zmień motywy w aplikacji
Możesz zezwolić użytkownikom na zmienianie motywu aplikacji, gdy jest ona uruchomiona. Poniżej są zalecane opcje:
- Jasny
- Ciemny
- Ustawienie domyślne systemu (zalecana opcja domyślna)
Te opcje są mapowane bezpośrednio na tryby AppCompat.DayNight
:
Światło:
MODE_NIGHT_NO
Ciemny:
MODE_NIGHT_YES
Ustawienie domyślne systemu:
MODE_NIGHT_FOLLOW_SYSTEM
Aby zmienić motyw, wykonaj te czynności:
Na poziomie interfejsu API 31 lub wyższym użyj
UiModeManager#setApplicationNightMode
aby poinformować system, jaki motyw jest uruchamiany w aplikacji. Dzięki temu system będzie pasował obok motywu wyświetlanego na ekranie powitalnym.W przypadku interfejsu API na poziomie 30 i niższym użyj
AppCompatDelegate.setDefaultNightMode()
aby przełączyć motyw.
Wymuś ciemny kolor
Android 10 udostępnia funkcję Force Dark, w której deweloperzy mogą
szybkie wdrożenie ciemnego motywu bez wyraźnego ustawienia motywu DayNight
.
Funkcja wymuszania trybu ciemnego analizuje każdy widok aplikacji z jasnym motywem i stosuje ciemny motyw automatycznie, zanim zostanie wyświetlony na ekranie. Możesz używać kombinacji trybu Force Dark i natywnym wdrożeniem, aby skrócić czas potrzebny na wdrożenie trybu ciemnego motyw.
Aplikacje muszą wymuszać tryb ciemny, włączając opcję android:forceDarkAllowed="true"
od tematu ćwiczenia. Ten atrybut jest ustawiony dla wszystkich tagów systemowych i
Jasne motywy udostępnione w Androidzie X, np. Theme.Material.Light
. Jeśli używasz
Wymuś tryb ciemny, dokładnie przetestuj aplikację i w razie potrzeby wyklucz wyświetlenia.
Jeśli aplikacja używa ciemnego motywu, np. Theme.Material
, Wymuszanie trybu ciemnego nie jest
zastosowano. Jeśli motyw aplikacji dziedziczy z motywu DayNight
, wymuszaj.
Ciemny nie jest stosowany z powodu automatycznego przełączania motywu.
Wyłączanie wymuszania ciemnego widoku na ekranie
Wymuszanie trybu ciemnego można ustawić w przypadku konkretnych widoków za pomocą
atrybutu układu android:forceDarkAllowed
lub z
setForceDarkAllowed()
Treści z internetu
Informacje o używaniu ciemnego motywu w treściach internetowych znajdziesz w artykule Ciemne kolory w komponencie WebView. Przykład ciemnego motywu zastosowany do WebView, zobacz wersję demonstracyjną komponentu WebView GitHub ,
Sprawdzone metody
W sekcjach poniżej znajdziesz sprawdzone metody implementacji ciemnych motywów.
Powiadomienia i widżety
W przypadku interfejsów, które są wyświetlane na urządzeniu, ale nie mają nad nimi bezpośredniego sterowania, upewnij się, Zadbaj o to, by używane przez Ciebie widoki były zgodne z motywem aplikacji hostującej. Dwa przykłady to powiadomienia i widżety uruchamiające.
Powiadomienia
Użyj szablonów powiadomień udostępnionych w systemie, np. MessagingStyle
. Ten
oznacza, że system odpowiada za zastosowanie właściwego stylu widoku.
Widżety i niestandardowe widoki powiadomień
W przypadku widżetów Menu z aplikacjami lub jeśli Twoja aplikacja używa niestandardowych widoków treści powiadomień, Testuj treści zarówno na jasnym, jak i ciemnym motywie.
Typowe błędy, na które należy uważać:
- Zakładamy, że kolor tła jest zawsze jasny
- Kodowanie tekstu na stałe.
- Ustawienie zakodowanego na stałe koloru tła z domyślnym kolorem tekstu.
- używanie ikony, którą można rysować, w stałym kolorze.
We wszystkich tych przypadkach użyj odpowiednich atrybutów motywu zamiast zakodowanych na stałe kolorów.
Ekrany uruchamiania
Jeśli Twoja aplikacja ma niestandardowy ekran uruchamiania, być może trzeba będzie go zmodyfikować, zgodnie z wybranym motywem.
Usuń wszystkie kolory wpisane na stałe, takie jak kolory tła automatycznie ustawione na
biały. Zamiast tego użyj atrybutu motywu ?android:attr/colorBackground
.
Zmiany konfiguracji
Gdy motyw aplikacji zmieni się (za pomocą ustawienia systemowego lub w aplikacji AppCompat),
wywołuje zdarzenie uiMode
zmiany konfiguracji. Oznacza to, że działania są automatycznie odtwarzane.
W niektórych przypadkach możesz potrzebować aplikacji do obsługi zmiany konfiguracji. Dla: możesz na przykład opóźnić zmianę konfiguracji, ponieważ film jest gra.
Aplikacja może poradzić sobie z implementacją ciemnego motywu, deklarując, że każdy
Activity
może obsługiwać zmianę konfiguracji uiMode
:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Gdy Activity
zadeklaruje, że obsługuje zmiany konfiguracji,
onConfigurationChanged()
.
jest wywoływana, gdy wystąpi zmiana motywu.
Aby sprawdzić aktualny motyw, aplikacje mogą uruchomić kod podobny do tego:
Kotlin
val currentNightMode = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK when (currentNightMode) { Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme. Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme. }
Java
int currentNightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK; switch (currentNightMode) { case Configuration.UI_MODE_NIGHT_NO: // Night mode is not active, we're using the light theme break; case Configuration.UI_MODE_NIGHT_YES: // Night mode is active, we're using dark theme break; }