Modalità scura (tema scuro) è una combinazione di colori in cui lo sfondo dello schermo diventa scuro (grigio scuro o nero) e il testo e gli elementi diventano chiari. La Modalità scura riduce l'affaticamento degli occhi in condizioni di scarsa illuminazione, risparmia la batteria sui display OLED (fino al 60% secondo Google, 2019) e soddisfa i requisiti di accessibilità per gli utenti con fotofobia. In iOS 13 e Android 10, la Modalità scura è diventata un'opzione di sistema: l'utente attiva il tema scuro a livello globale e l'applicazione lo adotta automaticamente. Ulteriori informazioni nella documentazione ufficiale di Android sul tema scuro.
Punti chiave
Modalità scura è una combinazione di colori in cui lo sfondo dello schermo è scuro (di solito #121212 in Android, #1C1C1E in iOS), mentre il testo e gli elementi dell'interfaccia sono chiari. A differenza di una semplice inversione di colori, una Modalità scura di qualità utilizza una palette attentamente selezionata: sfondo grigio scuro invece di nero puro (riduce l'effetto alone), saturazione ridotta dei colori di accento e ombre morbide. Il supporto di sistema per la Modalità scura è apparso in iOS 13 (settembre 2019) e Android 10 (settembre 2019).
Il motivo principale dell'adozione è il comfort dell'utente. In condizioni di scarsa illuminazione (sera, al buio), uno schermo bianco brillante causa affaticamento degli occhi e può provocare mal di testa. La Modalità scura riduce la luminosità dello schermo senza sacrificare la leggibilità. Per gli utenti con fotofobia o sensibilità alla luce, il tema scuro non è un'opzione ma l'unico modo per utilizzare comodamente un'applicazione. Secondo Android Developers, oltre il 30% degli utenti Android tiene il tema scuro sempre attivo.
La Modalità scura risparmia batteria sui schermi OLED. A differenza dell'LCD, dove la retroilluminazione è sempre accesa, i pixel OLED si illuminano da soli. Un colore scuro significa che il pixel è spento — il consumo energetico diminuisce. Secondo Google (Android Developers Blog, 2019), su un Pixel con display OLED, la Modalità scura al 100% di luminosità riduce il consumo energetico del 60% rispetto al tema chiaro. Sui schermi LCD, il risparmio è minimo (circa 3–5%) perché la retroilluminazione della matrice funziona indipendentemente dal colore del pixel.
Il supporto di sistema per la Modalità scura ha attraversato diverse fasi. iOS 13 (2019) ha introdotto un tema scuro globale tramite UIUserInterfaceStyle. Android 10 (2019) ha aggiunto Force Dark Mode per le applicazioni senza un proprio tema scuro. Android 12 (2021) con Material You ha iniziato a generare automaticamente una palette scura dagli sfondi. iOS 15 (2021) ha esteso l'API per Safari e i contenuti web. Secondo StatCounter (2026), l'82% delle prime 100 applicazioni nell'App Store e Google Play supportano la Modalità scura.
| Piattaforma | Versione | Anno | Innovazione chiave |
|---|---|---|---|
| iOS | 13 | 2019 | UIUserInterfaceStyle, traitCollection.userInterfaceStyle |
| Android | 10 (Q) | 2019 | Force Dark Mode, tema DayNight di AppCompat |
| iOS | 15 | 2021 | Tema scuro per contenuti web e Safari |
| Android | 12 | 2021 | Material You Dynamic Themes con palette scura generata automaticamente |
L'API Modalità scura iOS si basa sul protocollo UITraitEnvironment. Ogni UIViewController e UIView ha la proprietà traitCollection.userInterfaceStyle, che può essere .unspecified, .light o .dark. Quando il tema di sistema cambia, iOS chiama il metodo traitCollectionDidChange(_:). Lo sviluppatore deve aggiornare i colori in questo metodo, oppure utilizzare colori dinamici (UIColor(dynamicProvider:)) che passano automaticamente tra palette chiara e scura.
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
}
}
// Forza attivazione Modalità scura
window.overrideUserInterfaceStyle = .dark
Colori dinamici — il modo migliore per implementare la Modalità scura in iOS. UIColor(named:) carica automaticamente valori diversi dal Catalogo Asset per le apparenze .light e .dark. Basta definire un colore in Assets.xcassets con due varianti (Any Appearance + Dark Appearance) e UIKit selezionerà automaticamente quello giusto. I colori dinamici di sistema (UIColor.systemBackground, .label, .secondaryLabel) già supportano la Modalità scura e cambiano automaticamente.
SwiftUI supporta la Modalità scura nativamente. Tutti i colori e modificatori standard (Color.primary, .background, Color(UIColor.systemBackground)) si adattano automaticamente. Per colori personalizzati, usa Color(uiColor:) con un UIColor dinamico o la variabile d'ambiente @Environment(\.colorScheme) per il controllo esplicito del tema. La View SwiftUI si ridisegna automaticamente al cambio del tema, senza bisogno di chiamare traitCollectionDidChange.
struct ThemeView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text("Modalità scura")
.foregroundColor(colorScheme == .dark ? .white : .black)
.background(colorScheme == .dark ? Color(.systemGray6) : .white)
}
}
La Modalità scura Android è implementata tramite la libreria AppCompat e il tema Theme.AppCompat.DayNight. Di giorno si usa il tema chiaro, di notte — quello scuro. L'attivazione forzata viene impostata tramite AppCompatDelegate.setDefaultNightMode(): MODE_NIGHT_YES (scuro), MODE_NIGHT_NO (chiaro), MODE_NIGHT_FOLLOW_SYSTEM (sistema). Le risorse sono divise in chiare (res/values/styles.xml) e scure (res/values-night/styles.xml).
// Forza attivazione tema scuro
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Imposta prima di super.onCreate
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES
)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
// Determina tema corrente
private val isDarkMode: Boolean
get() = (resources.configuration.uiMode and
Configuration.UI_MODE_NIGHT_MASK) ==
Configuration.UI_MODE_NIGHT_YES
}
// Registra modalità notturna in AndroidManifest.xml
// android:configChanges="uiMode"
Force Dark Mode è una funzionalità di sistema in Android 10+ che inverte automaticamente i colori delle applicazioni senza supporto del tema scuro. Si attiva tramite le Opzioni sviluppatore o tramite l'attributo android:forceDarkAllowed="true" nel tema. Questa è una soluzione temporanea: per la produzione, è necessario implementare una propria palette scura tramite values-night, altrimenti la qualità visiva sarà scarsa (icone invertite, colori difficili da leggere).
Material You (Android 12+) genera automaticamente 5 colori chiave dallo sfondo del dispositivo: primary, secondary, tertiary, neutral, neutralVariant. Per ogni colore vengono create palette chiara e scura. Lo sviluppatore usa attributi: ?attr/colorPrimary, ?attr/colorOnPrimary, ?attr/colorSurface. Il sistema stesso seleziona la variante per il tema corrente. Dynamic Color è supportato su Android 12+ con Material Design 3 (componente com.google.android.material:material).
// values/themes.xml — tema chiaro
<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 — tema scuro
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/primary_dark</item>
<item name="colorOnPrimary">@color/on_primary_dark</item>
</style>
Il design della Modalità scura non è una semplice inversione di colori. Google Material Design raccomanda di usare grigio scuro (#121212) invece di nero puro. Il nero puro (#000000) crea un contrasto troppo elevato con il testo bianco, causando l'effetto alone (bagliore intorno alle lettere). Il livello di elevazione degli elementi è espresso dal colore: più alto è l'elemento, più chiaro è il suo sfondo. Una carta sopra lo sfondo — #1E1E1E, finestra di dialogo — #2D2D2D, pannello di navigazione — #383838.
Il contrasto cromatico nella Modalità scura dovrebbe essere inferiore rispetto alla Modalità chiara. Material Design raccomanda: testo primario — bianco (#FFFFFF) con opacità 87%, secondario — 60%, disabilitato — 38%. I colori di accento dovrebbero essere meno saturi: se nel tema chiaro primary = #6200EE, allora nello scuro — #BB86FC (viola chiaro e tenue). Secondo WCAG 2.1, un contrasto minimo di 4.5:1 per il testo normale deve essere mantenuto in entrambi i temi.
| Elemento | Modalità chiara | Modalità scura | Contrasto |
|---|---|---|---|
| Sfondo schermo | #FFFFFF | #121212 | — |
| Carta | #F5F5F5 | #1E1E1E | Elevazione 1dp |
| Testo primario | #000000 87% | #FFFFFF 87% | 15.8:1 |
| Testo secondario | #000000 60% | #FFFFFF 60% | 9.0:1 |
| Colore primario | #6200EE | #BB86FC | 7.2:1 |
Immagini e icone richiedono un trattamento separato nel tema scuro. Le icone con trasparenza devono essere ricolorate in colori chiari. Le foto con sfondi luminosi possono abbagliare — si consiglia di ridurre la luminosità del 20–30% o aggiungere una sovrapposizione semitrasparente. Per loghi ed elementi del marchio, usa la versione per lo sfondo scuro. Il Catalogo Asset di iOS e VectorDrawable di Android supportano risorse separate per temi chiaro e scuro.
La scelta tra i temi dipende dalle condizioni d'uso, dal tipo di contenuto e dalle preferenze dell'utente. Uno studio del Nielsen Norman Group (2020) ha mostrato: in condizioni di illuminazione normale, la Modalità chiara offre una velocità di lettura superiore del 15–20%. Tuttavia, in condizioni di scarsa illuminazione, la Modalità scura riduce l'affaticamento degli occhi e migliora la leggibilità. Per interfacce con grandi quantità di testo (articoli, documenti), la Modalità chiara è solitamente preferibile.
Il consumo energetico è un argomento chiave per la Modalità scura su OLED. Secondo Google (2019), YouTube in tema scuro su uno schermo OLED consuma il 43% in meno di energia rispetto al tema chiaro. Google Maps — 32%. Più luminosa è l'interfaccia e più alto è il livello di luminosità dello schermo, maggiore è il risparmio. Sui schermi LCD, il risparmio non supera il 5%. Per gli utenti che lavorano molto con l'app all'aperto sotto il sole forte, la Modalità chiara rimane l'unica opzione leggibile.
| Criterio | Modalità scura | Modalità chiara |
|---|---|---|
| Leggibilità con luce forte | Bassa (riflessi su sfondo scuro) | Alta (massimo contrasto) |
| Affaticamento occhi al buio | Basso | Alto (luce intensa) |
| Consumo OLED | Basso (fino a -60%) | Alto |
| Consumo LCD | Simile (±5%) | Simile (±5%) |
| Percezione dei colori | Distorta (saturazione ridotta) | Naturale |
| Accomodamento | Richiede tempo di adattamento | Naturale per l'occhio |
Raccomandazioni di IT Sectr — implementiamo entrambi i temi con opzioni di commutazione: sistema (segui sistema), scuro, chiaro. La commutazione automatica non dovrebbe essere l'unica opzione — un utente potrebbe volere il tema scuro durante il giorno (per l'emicrania) o il tema chiaro di notte (per la lettura). Nei nostri progetti, aggiungiamo un selettore di tema nelle impostazioni del profilo e ricordiamo la scelta. Per applicazioni con contenuti premium (foto, video), si consiglia un'anteprima del tema prima dell'applicazione.
Domande frequenti
Sì, sui schermi OLED il risparmio può raggiungere il 60% (Google, Pixel, 2019). Più luminosa è l'interfaccia, maggiore è il risparmio. Sui schermi LCD, la differenza è minima — fino al 5%, poiché la retroilluminazione della matrice funziona indipendentemente dal colore del pixel. Se un utente utilizza attivamente un'applicazione con elementi prevalentemente bianchi, la Modalità scura offre il massimo effetto.
Modalità scura è il concetto generale di uno schema di interfaccia scuro. Material You Dynamic Themes (Android 12+) è un'implementazione che genera automaticamente una palette scura dallo sfondo del dispositivo. L'utente può forzare l'attivazione del tema scuro e Material You adatterà i colori a una palette personalizzata invece di utilizzare colori scuri fissi.
Vai su Impostazioni → Schermo e luminosità → Aspetto e seleziona «Scuro». A livello di programmazione: imposta window.overrideUserInterfaceStyle = .dark in AppDelegate. È disponibile anche la commutazione automatica in base all'orario (tramonto/alba o ora personalizzata), che consente transizioni fluide tra i temi durante la giornata.
forceDarkMode (Android 10+) è un'opzione di sistema per forzare il tema scuro nelle applicazioni senza supporto nativo. Android inverte automaticamente i colori dello schermo. Per un tema scuro di qualità, lo sviluppatore deve implementare una propria palette tramite values-night e disabilitare forceDarkAllowed.
La Modalità scura di sistema è apparsa in iOS 13 (settembre 2019) e Android 10 (settembre 2019). Prima di allora, gli sviluppatori implementavano i temi scuri da soli. Nel 2026, oltre l'80% delle principali applicazioni nell'App Store e Google Play supportano la Modalità scura, e Apple e Google la raccomandano come opzione obbligatoria.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche