Dark Mode — co to jest, ciemny motyw interfejsu w aplikacjach mobilnych

Autor: IT Sectr Opublikowano: 2026-02-26 Czas czytania: 7 min

Dark Mode (ciemny motyw) — schemat kolorystyczny interfejsu, w którym tło ekranu staje się ciemne (ciemnoszare lub czarne), a tekst i elementy — jasne. Dark Mode zmniejsza obciążenie oczu przy słabym oświetleniu, oszczędza baterię na wyświetlaczach OLED (do 60% według danych Google, 2019) i spełnia wymagania dostępności dla użytkowników z fotofobią. W iOS 13 i Android 10 Dark Mode stał się opcją systemową — użytkownik włącza ciemny motyw globalnie, a aplikacja automatycznie go przejmuje. Więcej w oficjalnej dokumentacji Androida dotyczącej ciemnego motywu.

Najważniejsze

  • Dark Mode — schemat kolorystyczny z ciemnym tłem i jasnym tekstem dla zmniejszenia obciążenia wzroku
  • Oszczędność OLED — na ekranach OLED ciemne piksele są wyłączone, co oszczędza do 60% baterii
  • Android forceDarkMode — systemowa opcja wymuszonego włączenia ciemnego motywu w Android Q+
  • iOS traitCollection — Swift API do wykrywania i przełączania między jasnym a ciemnym motywem
  • Dynamic Themes — Material You (Android 12+) generuje ciemną paletę z tapety urządzenia

Czym jest Dark Mode i dlaczego jest potrzebny?

Dark Mode — to schemat kolorystyczny interfejsu, w którym tło ekranu jest ciemne (zwykle #121212 w Android, #1C1C1E w iOS), a tekst i elementy interfejsu są jasne. W przeciwieństwie do prostej inwersji kolorów, wysokiej jakości Dark Mode wykorzystuje specjalnie dobraną paletę: ciemnoszare tło zamiast czystej czerni (zmniejsza efekt halo), obniżone nasycenie kolorów akcentujących i miękkie cienie. Systemowe wsparcie Dark Mode pojawiło się w iOS 13 (wrzesień 2019) i Android 10 (wrzesień 2019).

Główny powód wdrożenia — komfort użytkownika. Przy słabym oświetleniu (wieczorem, w ciemności) jasny biały ekran powoduje napięcie oczu i może wywoływać ból głowy. Dark Mode zmniejsza jasność ekranu bez utraty czytelności. Dla użytkowników z fotofobią lub nadwrażliwością na światło ciemny motyw to nie opcja, a jedyna możliwość komfortowego korzystania z aplikacji. Według Android Developers ponad 30% użytkowników Androida stale włącza ciemny motyw.

Dark Mode oszczędza baterię na ekranach OLED. W przeciwieństwie do LCD, gdzie podświetlenie świeci zawsze, piksele OLED świecą samodzielnie. Ciemny kolor oznacza, że piksel jest wyłączony — zużycie energii spada. Według Google (Android Developers Blog, 2019), na Pixel z ekranem OLED Dark Mode przy 100% jasności zmniejsza zużycie energii o 60% w porównaniu z jasnym motywem. Na ekranach LCD oszczędność jest minimalna (około 3–5%), ponieważ podświetlenie matrycy działa niezależnie od koloru pikseli.

Historia Dark Mode w mobilnych systemach operacyjnych

Systemowe wsparcie Dark Mode przeszło kilka etapów. iOS 13 (2019) wprowadził globalny ciemny motyw przez UIUserInterfaceStyle. Android 10 (2019) dodał Force Dark Mode dla aplikacji bez własnego ciemnego motywu. Android 12 (2021) z Material You zaczął automatycznie generować ciemną paletę z tapety. iOS 15 (2021) rozszerzył API dla Safari i treści internetowych. Według StatCounter (2026), 82% top-100 aplikacji w App Store i Google Play obsługuje Dark Mode.

PlatformaWersjaRokKluczowa innowacja
iOS132019UIUserInterfaceStyle, traitCollection.userInterfaceStyle
Android10 (Q)2019Force Dark Mode, motyw DayNight AppCompat
iOS152021Ciemny motyw dla treści internetowych i Safari
Android122021Material You Dynamic Themes z automatycznym generowaniem ciemnej palety

Dark Mode w iOS: Swift API i obsługa UIKit

iOS Dark Mode API opiera się na protokole UITraitEnvironment. Każdy UIViewController i UIView ma właściwość traitCollection.userInterfaceStyle, która może być .unspecified, .light lub .dark. Przy zmianie motywu systemowego iOS wywołuje metodę traitCollectionDidChange(_:). Deweloper musi zaktualizować kolory w tej metodzie lub użyć dynamicznych kolorów (UIColor(dynamicProvider:)), które automatycznie przełączają się między jasną a ciemną paletą.

swift
class ViewController: UIViewController {

    @IBOutlet var titleLabel: UILabel!

    override func traitCollectionDidChange(_: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
            updateColors()
        }
    }

    func updateColors() {
        let isDark = traitCollection.userInterfaceStyle == .dark
        view.backgroundColor = isDark ? UIColor(named: "darkBackground") : .systemBackground
        titleLabel.textColor = isDark ? .white : .darkText
    }
}

// Wymuszone włączenie Dark Mode
window.overrideUserInterfaceStyle = .dark

Dynamiczne kolory — najlepszy sposób implementacji Dark Mode w iOS. UIColor(named:) automatycznie ładuje różne wartości z Asset Catalog dla .light i .dark appearance. Wystarczy ustawić kolor w Assets.xcassets z dwoma wariantami (Any Appearance + Dark Appearance), a UIKit sam wybierze odpowiedni. Dynamic system colors (UIColor.systemBackground, .label, .secondaryLabel) już obsługują Dark Mode i zmieniają się automatycznie.

SwiftUI i Dark Mode

SwiftUI obsługuje Dark Mode od razu po wyjęciu z pudełka. Wszystkie standardowe kolory i modyfikatory (Color.primary, .background, Color(UIColor.systemBackground)) automatycznie się dostosowują. Dla niestandardowych kolorów użyj Color(uiColor:) z dynamicznym UIColor lub zmiennej środowiskowej @Environment(\.colorScheme) do jawnego sprawdzenia motywu. Widok SwiftUI automatycznie przerysowuje się przy zmianie motywu, bez konieczności wywoływania traitCollectionDidChange.

swift
struct ThemeView: View {
    @Environment(\.colorScheme) var colorScheme

    var body: some View {
        Text("Dark Mode")
            .foregroundColor(colorScheme == .dark ? .white : .black)
            .background(colorScheme == .dark ? Color(.systemGray6) : .white)
    }
}

Dark Mode w Android: Kotlin API i AppCompat

Android Dark Mode jest implementowany przez bibliotekę AppCompat i motyw Theme.AppCompat.DayNight. W dzień używany jest jasny motyw, w nocy — ciemny. Wymuszone włączenie ustawia się przez AppCompatDelegate.setDefaultNightMode(): MODE_NIGHT_YES (ciemny), MODE_NIGHT_NO (jasny), MODE_NIGHT_FOLLOW_SYSTEM (systemowy). Zasoby są podzielone na jasne (res/values/styles.xml) i ciemne (res/values-night/styles.xml).

kotlin
// Wymuszone włączenie ciemnego motywu
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        // Ustawienie przed super.onCreate
        AppCompatDelegate.setDefaultNightMode(
            AppCompatDelegate.MODE_NIGHT_YES
        )
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    // Określenie bieżącego motywu
    private val isDarkMode: Boolean
        get() = (resources.configuration.uiMode and
            Configuration.UI_MODE_NIGHT_MASK) ==
            Configuration.UI_MODE_NIGHT_YES
}

// Rejestracja trybu nocnego w AndroidManifest.xml
// android:configChanges="uiMode"

Force Dark Mode — funkcja systemowa Android 10+, która automatycznie odwraca kolory aplikacji nieobsługującej ciemnego motywu. Włącza się przez Ustawienia programisty lub przez atrybut android:forceDarkAllowed="true" w motywie. To rozwiązanie tymczasowe: do produkcji należy zaimplementować własną ciemną paletę przez values-night, w przeciwnym razie jakość wizualna będzie niska (odwrócone ikony, źle czytelne kolory).

Material You Dynamic Themes

Material You (Android 12+) automatycznie generuje 5 kluczowych kolorów z tapety urządzenia: primary, secondary, tertiary, neutral, neutralVariant. Dla każdego koloru tworzone są jasne i ciemne palety. Deweloper używa atrybutów: ?attr/colorPrimary, ?attr/colorOnPrimary, ?attr/colorSurface. System sam wybiera wariant dla bieżącego motywu. Dynamic Color jest obsługiwany na Android 12+ z Material Design 3 (komponent com.google.android.material:material).

kotlin
// values/themes.xml — jasny motyw
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
    <item name="colorPrimary">@color/primary_light</item>
    <item name="colorOnPrimary">@color/on_primary_light</item>
</style>

// values-night/themes.xml — ciemny motyw
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
    <item name="colorPrimary">@color/primary_dark</item>
    <item name="colorOnPrimary">@color/on_primary_dark</item>
</style>

Projektowanie ciemnego motywu: zasady kontrastu i kolorów

Projektowanie Dark Mode — to nie tylko inwersja kolorów. Google Material Design zaleca używanie ciemnoszarego (#121212) zamiast czystej czerni. Czysta czerń (#000000) tworzy zbyt wysoki kontrast z białym tekstem, powodując efekt halo (aureola wokół liter). Poziom elewacji (wzniesienia) elementów jest określany przez kolor: im wyższy element, tym jaśniejsze jego tło. Karta na tle — #1E1E1E, okno dialogowe — #2D2D2D, panel nawigacyjny — #383838.

Kontrast kolorów w Dark Mode powinien być niższy niż w Light Mode. Material Design zaleca: tekst primary — biały (#FFFFFF) z przezroczystością 87%, secondary — 60%, disabled — 38%. Kolory akcentujące powinny być mniej nasycone: jeśli w jasnym motywie primary = #6200EE, to w ciemnym — #BB86FC (jasny, stonowany fiolet). Według WCAG 2.1 minimalny kontrast 4.5:1 dla zwykłego tekstu musi być zachowany w obu motywach.

ElementLight ModeDark ModeKontrast
Tło ekranu#FFFFFF#121212
Karta#F5F5F5#1E1E1EElewacja 1dp
Tekst Primary#000000 87%#FFFFFF 87%15.8:1
Tekst Secondary#000000 60%#FFFFFF 60%9.0:1
Kolor Primary#6200EE#BB86FC7.2:1

Obrazy i ikony wymagają osobnego przetworzenia w ciemnym motywie. Ikony z przezroczystością powinny być przemalowane na jasny kolor. Zdjęcia z jasnym tłem mogą wyglądać oślepiająco — zaleca się zmniejszenie jasności o 20–30% lub dodanie półprzezroczystej nakładki. Dla logo i elementów marki używaj wersji na ciemne tło. iOS Asset Catalog i Android VectorDrawable obsługują osobne zasoby dla jasnego i ciemnego motywu.

Porównanie Dark Mode i Light Mode: plusy i minusy

Wybór między motywami zależy od warunków użytkowania, rodzaju treści i preferencji użytkownika. Badanie Nielsen Norman Group (2020) wykazało: przy normalnym oświetleniu Light Mode zapewnia o 15–20% wyższą prędkość czytania. Jednak w warunkach słabego oświetlenia Dark Mode zmniejsza zmęczenie oczu i poprawia czytelność. Dla interfejsów z dużą ilością tekstu (artykuły, dokumenty) Light Mode jest zwykle preferowany.

Zużycie energii — kluczowy argument za Dark Mode na OLED. Według Google (2019), YouTube w ciemnym motywie na ekranie OLED zużywa o 43% mniej energii niż w jasnym. Google Maps — o 32%. Im jaśniejszy interfejs i im wyższy poziom jasności ekranu, tym większa oszczędność. Na ekranach LCD oszczędność nie przekracza 5%. Dla użytkowników, którzy dużo pracują z aplikacją na zewnątrz w jasnym słońcu, Light Mode pozostaje jedyną czytelną opcją.

KryteriumDark ModeLight Mode
Czytelność przy jasnym świetleNiska (odblaski na ciemnym tle)Wysoka (maksymalny kontrast)
Zmęczenie oczu w ciemnościNiskieWysokie (jasne światło)
Zużycie energii OLEDNiskie (do -60%)Wysokie
Zużycie energii LCDJednakowe (±5%)Jednakowe (±5%)
Postrzeganie kolorówZniekształcone (obniżone nasycenie)Naturalne
AkomodacjaWymaga czasu na przyzwyczajenieNaturalna dla oka

Zalecenia IT Sectr — implementujemy oba motywy z możliwością przełączania: systemowy (follow system), ciemny, jasny. Automatyczne przełączanie nie powinno być jedyną opcją — użytkownik może chcieć ciemnego motywu w dzień (przy migrenie) lub jasnego w nocy (podczas czytania). W naszych projektach dodajemy przełącznik motywu w ustawieniach profilu i zapamiętujemy wybór. Dla aplikacji z treścią premium (zdjęcia, wideo) zaleca się podgląd motywu przed zastosowaniem.

Często zadawane pytania

Czy Dark Mode oszczędza baterię?

Tak, na ekranach OLED oszczędność sięga 60% (Google, Pixel, 2019). Im jaśniejszy interfejs, tym większa oszczędność. Na ekranach LCD różnica jest minimalna — do 5%, ponieważ podświetlenie matrycy działa niezależnie od koloru pikseli. Jeśli użytkownik aktywnie używa aplikacji z przewagą białych elementów, Dark Mode daje maksymalny efekt.

Czym Dark Mode różni się od ciemnego motywu Material You?

Dark Mode — ogólna koncepcja ciemnego schematu interfejsu. Material You Dynamic Themes (Android 12+) — implementacja, która automatycznie generuje ciemną paletę z tapety urządzenia. Użytkownik może wymusić włączenie ciemnego motywu, a Material You dostosuje kolory do spersonalizowanej palety, zamiast używać stałych ciemnych kolorów.

Jak włączyć Dark Mode w iOS?

W Ustawienia → Ekran i jasność → Wygląd wybierz „Ciemny". Programowo: ustaw window.overrideUserInterfaceStyle = .dark w AppDelegate. Dostępne jest również automatyczne przełączanie według harmonogramu (zachód/świt lub czas niestandardowy) — umożliwia to płynne przechodzenie między motywami w ciągu dnia.

Czym jest forceDarkMode w Android?

forceDarkMode (Android 10+) — opcja systemowa do wymuszonego włączenia ciemnego motywu w aplikacjach bez własnej obsługi. Android automatycznie odwraca kolory ekranu. Dla wysokiej jakości ciemnego motywu deweloper powinien zaimplementować własną paletę przez values-night i wyłączyć forceDarkAllowed.

Kiedy pojawił się Dark Mode w mobilnych systemach operacyjnych?

Systemowy Dark Mode pojawił się w iOS 13 (wrzesień 2019) i Android 10 (wrzesień 2019). Przedtem deweloperzy implementowali ciemne motywy samodzielnie. Na rok 2026 ponad 80% topowych aplikacji w App Store i Google Play obsługuje Dark Mode, a Apple i Google zalecają go jako obowiązkową opcję.

Podsumowanie

  • Dark Mode — ciemny schemat kolorystyczny interfejsu zmniejszający obciążenie wzroku przy słabym oświetleniu
  • Oszczędność OLED — do 60% redukcji zużycia energii na ekranach OLED (Google, 2019)
  • iOS API — traitCollection.userInterfaceStyle, UIColor(dynamicProvider:), overrideUserInterfaceStyle
  • Android API — AppCompatDelegate.setDefaultNightMode(), values-night, Force Dark Mode
  • Material You — Dynamic Color generuje ciemną paletę z tapety urządzenia (Android 12+)
  • Projektowanie — ciemnoszary #121212 zamiast czerni, obniżone nasycenie akcentów, elewacja przez kolor
  • Wybór motywu — zalecamy opcję systemową + ręczny przełącznik w ustawieniach profilu

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również