Modo Escuro (tema escuro) é um esquema de cores no qual o fundo da tela fica escuro (cinza escuro ou preto), e o texto e os elementos ficam claros. O Modo Escuro reduz o cansaço visual em condições de pouca luz, economiza bateria em telas OLED (até 60% segundo a Google, 2019) e atende aos requisitos de acessibilidade para usuários com fotofobia. No iOS 13 e Android 10, o Modo Escuro tornou-se uma opção de sistema — o usuário ativa o tema escuro globalmente, e o aplicativo o adota automaticamente. Mais informações na documentação oficial do Android sobre tema escuro.
Principais pontos
Modo Escuro é um esquema de cores no qual o fundo da tela é escuro (geralmente #121212 no Android, #1C1C1E no iOS), enquanto o texto e os elementos da interface são claros. Ao contrário de uma simples inversão de cores, o Modo Escuro de qualidade utiliza uma paleta cuidadosamente selecionada: fundo cinza escuro em vez de preto puro (reduz o efeito halo), saturação reduzida de cores de acento e sombras suaves. O suporte de sistema para o Modo Escuro apareceu no iOS 13 (setembro de 2019) e Android 10 (setembro de 2019).
A principal razão para sua adoção é o conforto do usuário. Em condições de pouca luz (à noite, no escuro), uma tela branca brilhante causa cansaço visual e pode provocar dores de cabeça. O Modo Escuro reduz o brilho da tela sem sacrificar a legibilidade. Para usuários com fotofobia ou sensibilidade à luz, o tema escuro não é uma opção, mas a única maneira de usar um aplicativo confortavelmente. Segundo o Android Developers, mais de 30% dos usuários do Android mantêm o tema escuro ativado o tempo todo.
O Modo Escuro economiza bateria em telas OLED. Ao contrário do LCD, onde a retroiluminação está sempre ligada, os pixels OLED iluminam-se por si próprios. Uma cor escura significa que o pixel está desligado — o consumo de energia diminui. Segundo a Google (Android Developers Blog, 2019), em um Pixel com tela OLED, o Modo Escuro a 100% de brilho reduz o consumo de energia em 60% em comparação com o tema claro. Em telas LCD, a economia é mínima (cerca de 3–5%) porque a retroiluminação da matriz funciona independentemente da cor do pixel.
O suporte de sistema para o Modo Escuro passou por várias etapas. O iOS 13 (2019) introduziu um tema escuro global via UIUserInterfaceStyle. O Android 10 (2019) adicionou o Force Dark Mode para aplicativos sem tema escuro próprio. O Android 12 (2021) com Material You começou a gerar automaticamente uma paleta escura a partir dos papéis de parede. O iOS 15 (2021) expandiu a API para Safari e conteúdo web. Segundo o StatCounter (2026), 82% dos 100 principais aplicativos na App Store e Google Play suportam o Modo Escuro.
| Plataforma | Versão | Ano | Inovação principal |
|---|---|---|---|
| iOS | 13 | 2019 | UIUserInterfaceStyle, traitCollection.userInterfaceStyle |
| Android | 10 (Q) | 2019 | Force Dark Mode, tema DayNight do AppCompat |
| iOS | 15 | 2021 | Tema escuro para conteúdo web e Safari |
| Android | 12 | 2021 | Material You Dynamic Themes com paleta escura gerada automaticamente |
A API do Modo Escuro no iOS é baseada no protocolo UITraitEnvironment. Cada UIViewController e UIView possui a propriedade traitCollection.userInterfaceStyle, que pode ser .unspecified, .light ou .dark. Quando o tema do sistema muda, o iOS chama o método traitCollectionDidChange(_:). O desenvolvedor deve atualizar as cores neste método, ou usar cores dinâmicas (UIColor(dynamicProvider:)) que alternam automaticamente entre as paletas clara e escura.
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
}
}
// Forçar ativação do Modo Escuro
window.overrideUserInterfaceStyle = .dark
Cores dinâmicas — a melhor forma de implementar o Modo Escuro no iOS. O UIColor(named:) carrega automaticamente valores diferentes do Catálogo de Ativos para as aparências .light e .dark. Basta definir uma cor no Assets.xcassets com duas variantes (Any Appearance + Dark Appearance), e o UIKit selecionará a correta automaticamente. As cores dinâmicas do sistema (UIColor.systemBackground, .label, .secondaryLabel) já suportam o Modo Escuro e mudam automaticamente.
SwiftUI suporta o Modo Escuro nativamente. Todas as cores e modificadores padrão (Color.primary, .background, Color(UIColor.systemBackground)) se adaptam automaticamente. Para cores personalizadas, use Color(uiColor:) com um UIColor dinâmico ou a variável de ambiente @Environment(\.colorScheme) para verificação explícita do tema. A View do SwiftUI é redesenhada automaticamente ao mudar o tema, sem necessidade de chamar traitCollectionDidChange.
struct ThemeView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text("Modo Escuro")
.foregroundColor(colorScheme == .dark ? .white : .black)
.background(colorScheme == .dark ? Color(.systemGray6) : .white)
}
}
O Modo Escuro no Android é implementado através da biblioteca AppCompat e do tema Theme.AppCompat.DayNight. Durante o dia usa-se o tema claro, à noite — o escuro. A ativação forçada é definida através de AppCompatDelegate.setDefaultNightMode(): MODE_NIGHT_YES (escuro), MODE_NIGHT_NO (claro), MODE_NIGHT_FOLLOW_SYSTEM (sistema). Os recursos são divididos em claros (res/values/styles.xml) e escuros (res/values-night/styles.xml).
// Forçar ativação do tema escuro
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Definir antes de super.onCreate
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES
)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
// Determinar tema atual
private val isDarkMode: Boolean
get() = (resources.configuration.uiMode and
Configuration.UI_MODE_NIGHT_MASK) ==
Configuration.UI_MODE_NIGHT_YES
}
// Registrar modo noturno no AndroidManifest.xml
// android:configChanges="uiMode"
Force Dark Mode é um recurso do sistema no Android 10+ que inverte automaticamente as cores de aplicativos sem suporte a tema escuro. É ativado através das Opções do Desenvolvedor ou através do atributo android:forceDarkAllowed="true" no tema. Esta é uma solução temporária: para produção, você precisa implementar sua própria paleta escura através de values-night, caso contrário a qualidade visual será baixa (ícones invertidos, cores difíceis de ler).
Material You (Android 12+) gera automaticamente 5 cores principais a partir do papel de parede do dispositivo: primary, secondary, tertiary, neutral, neutralVariant. Para cada cor, são criadas paletas clara e escura. O desenvolvedor usa atributos: ?attr/colorPrimary, ?attr/colorOnPrimary, ?attr/colorSurface. O próprio sistema seleciona a variante para o tema atual. O Dynamic Color é suportado no Android 12+ com Material Design 3 (componente com.google.android.material:material).
// values/themes.xml — tema claro
<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 escuro
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/primary_dark</item>
<item name="colorOnPrimary">@color/on_primary_dark</item>
</style>
O design do Modo Escuro não é apenas inversão de cores. O Google Material Design recomenda usar cinza escuro (#121212) em vez de preto puro. O preto puro (#000000) cria contraste muito alto com o texto branco, causando efeito halo (brilho ao redor das letras). O nível de elevação dos elementos é expresso através da cor: quanto mais alto o elemento, mais claro seu fundo. Um cartão sobre o fundo — #1E1E1E, diálogo — #2D2D2D, painel de navegação — #383838.
O contraste de cor no Modo Escuro deve ser menor que no Modo Claro. O Material Design recomenda: texto primário — branco (#FFFFFF) com opacidade de 87%, secundário — 60%, desativado — 38%. As cores de acento devem ser menos saturadas: se no tema claro primary = #6200EE, então no escuro — #BB86FC (roxo claro e suave). De acordo com WCAG 2.1, um contraste mínimo de 4.5:1 para texto normal deve ser mantido em ambos os temas.
| Elemento | Modo Claro | Modo Escuro | Contraste |
|---|---|---|---|
| Fundo da tela | #FFFFFF | #121212 | — |
| Cartão | #F5F5F5 | #1E1E1E | Elevação 1dp |
| Texto primário | #000000 87% | #FFFFFF 87% | 15.8:1 |
| Texto secundário | #000000 60% | #FFFFFF 60% | 9.0:1 |
| Cor primária | #6200EE | #BB86FC | 7.2:1 |
Imagens e ícones requerem tratamento separado no tema escuro. Ícones com transparência devem ser recoloridos em cores claras. Fotografias com fundos brilhantes podem ofuscar — recomenda-se reduzir o brilho em 20–30% ou adicionar uma sobreposição semitransparente. Para logotipos e elementos de marca, use a versão para fundo escuro. O Catálogo de Ativos do iOS e o VectorDrawable do Android suportam recursos separados para temas claro e escuro.
A escolha entre temas depende das condições de uso, do tipo de conteúdo e das preferências do usuário. Um estudo do Nielsen Norman Group (2020) mostrou: em condições normais de iluminação, o Modo Claro proporciona uma velocidade de leitura 15–20% maior. No entanto, em condições de pouca luz, o Modo Escuro reduz a fadiga ocular e melhora a legibilidade. Para interfaces com grandes quantidades de texto (artigos, documentos), o Modo Claro geralmente é preferível.
O consumo de energia é um argumento chave para o Modo Escuro em OLED. Segundo a Google (2019), o YouTube no tema escuro em uma tela OLED consome 43% menos energia do que no tema claro. Google Maps — 32%. Quanto mais brilhante a interface e maior o nível de brilho da tela, maiores as economias. Em telas LCD, as economias não excedem 5%. Para usuários que trabalham muito com o aplicativo ao ar livre sob luz solar intensa, o Modo Claro continua sendo a única opção legível.
| Critério | Modo Escuro | Modo Claro |
|---|---|---|
| Legibilidade com luz brilhante | Baixa (reflexos em fundo escuro) | Alta (máximo contraste) |
| Fadiga ocular no escuro | Baixa | Alta (luz brilhante) |
| Consumo OLED | Baixo (até -60%) | Alto |
| Consumo LCD | Semelhante (±5%) | Semelhante (±5%) |
| Percepção de cores | Distorcida (saturação reduzida) | Natural |
| Acomodação | Requer tempo de adaptação | Natural para o olho |
Recomendações da IT Sectr — implementamos ambos os temas com opções de alternância: sistema (seguir sistema), escuro, claro. A alternância automática não deve ser a única opção — um usuário pode querer o tema escuro durante o dia (para enxaquecas) ou o tema claro à noite (para leitura). Em nossos projetos, adicionamos um seletor de tema nas configurações do perfil e lembramos a escolha. Para aplicativos com conteúdo premium (fotos, vídeo), recomenda-se a pré-visualização do tema antes de aplicá-lo.
Perguntas frequentes
Sim, em telas OLED a economia pode chegar a 60% (Google, Pixel, 2019). Quanto mais brilhante a interface, maior a economia. Em telas LCD, a diferença é mínima — até 5%, pois a retroiluminação da matriz funciona independentemente da cor do pixel. Se um usuário usa ativamente um aplicativo com elementos predominantemente brancos, o Modo Escuro proporciona o máximo efeito.
Modo Escuro é o conceito geral de um esquema de interface escuro. Material You Dynamic Themes (Android 12+) é uma implementação que gera automaticamente uma paleta escura a partir do papel de parede do dispositivo. O usuário pode forçar a ativação do tema escuro, e o Material You ajustará as cores para uma paleta personalizada em vez de usar cores escuras fixas.
Vá em Ajustes → Tela e Brilho → Aparência e selecione "Escuro". Programaticamente: defina window.overrideUserInterfaceStyle = .dark no AppDelegate. A alternância automática por horário (pôr do sol/nascer do sol ou horário personalizado) também está disponível, permitindo transições suaves entre os temas ao longo do dia.
forceDarkMode (Android 10+) é uma opção de sistema para forçar o tema escuro em aplicativos sem suporte nativo. O Android inverte automaticamente as cores da tela. Para um tema escuro de qualidade, o desenvolvedor deve implementar sua própria paleta através de values-night e desabilitar forceDarkAllowed.
O Modo Escuro do sistema apareceu no iOS 13 (setembro de 2019) e Android 10 (setembro de 2019). Antes disso, os desenvolvedores implementavam temas escuros por conta própria. Em 2026, mais de 80% dos principais aplicativos na App Store e Google Play suportam o Modo Escuro, e a Apple e a Google o recomendam como uma opção obrigatória.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também