![](https://developer.android.com/static/images/guide/topics/ui/look-and-feel/darktheme.png?authuser=19&hl=pt)
O tema escuro está disponível no Android 10 (API de nível 29) e versões mais recentes. Ele tem o os seguintes benefícios:
- Reduz significativamente o uso de energia, dependendo do dispositivo da tela.
- Melhora a visibilidade para usuários com baixa visão e para aqueles sensíveis a luzes intensas.
- Facilita o uso do dispositivo em um ambiente com pouca luz.
O tema escuro se aplica à interface do sistema Android e aos apps em execução no dispositivo.
Há três maneiras de ativar o tema escuro no Android 10 e versões mais recentes:
- Para usar as configurações do sistema, acesse Configurações > Exibição > Tema ativar o tema escuro.
- Use o bloco "Configurações rápidas" para trocar de tema na bandeja de notificações quando ativado.
- Em dispositivos Pixel, ative o modo Economia de bateria para ativar o tema escuro ao mesmo tempo tempo de resposta. Outros dispositivos podem não oferecer suporte a esse comportamento.
Para ver instruções sobre como aplicar um tema escuro ao conteúdo baseado na Web usando um componente WebView, consulte Escurecer conteúdo da Web com WebView.
Oferecer suporte ao tema escuro no app
Para oferecer suporte ao tema escuro, defina o tema do app, que geralmente é encontrado em
res/values/styles.xml
para herdar de um tema DayNight
:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
Você também pode usar a opção Componentes escuros do Material Design tema:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Isso vincula o tema principal do aplicativo aos sinalizadores do modo noturno controlados pelo sistema e define um tema escuro padrão no app quando ele está ativado.
Temas e estilos
Evite usar cores ou ícones fixados no código para uso com um tema claro. Usar de tema ou recursos qualificados para a noite.
Dois atributos de tema são mais importantes para o tema escuro:
?android:attr/textColorPrimary
: uma cor de texto de uso geral. É quase preto em temas claros e quase branco em temas escuros. Contém um estado desativado.?attr/colorControlNormal
: uma cor de ícone de uso geral. Contém um estado desativado.
Recomendamos o uso do Material Design
componentes, já que seus temas de cores
sistema, como o tema
atributos ?attr/colorSurface
e ?attr/colorOnSurface
, fornece acesso fácil
cores adequadas. Você pode personalizar esses atributos no seu tema.
Mudar temas no app
Você pode permitir que os usuários mudem o tema do app enquanto ele está em execução. O seguinte são opções recomendadas:
- Claro
- Escuro
- Padrão do sistema (a opção padrão recomendada)
Essas opções mapeiam diretamente os modos AppCompat.DayNight
:
Leve:
MODE_NIGHT_NO
Escuro:
MODE_NIGHT_YES
Padrão do sistema:
MODE_NIGHT_FOLLOW_SYSTEM
Para trocar o tema, faça o seguinte:
No nível 31 da API e mais recentes, use
UiModeManager#setApplicationNightMode
para permitir que o sistema saiba qual tema seu app executa. Isso permite que o sistema faça a correspondência o tema durante a tela de apresentação.No nível 30 da API e anteriores, use
AppCompatDelegate.setDefaultNightMode()
para trocar de tema.
Forçar modo escuro
O Android 10 oferece o Forçar modo escuro, um recurso para os desenvolvedores
implementar rapidamente um tema escuro sem definir um tema DayNight
explicitamente.
O recurso "Forçar modo escuro" analisa cada visualização do app claro e aplica um tema escuro automaticamente antes de ser desenhado na tela. Você pode usar uma combinação do Forçar modo escuro e nativa para reduzir o tempo necessário para implementar tema.
Os apps precisam ativar o Forçar modo escuro definindo android:forceDarkAllowed="true"
em
o tema da atividade. Esse atributo é definido em todos os sistemas
Temas claros fornecidos pelo AndroidX, como Theme.Material.Light
. Ao usar
Forçar o uso do modo escuro, testar completamente o app e excluir visualizações conforme necessário.
Se o app usa um tema escuro, como Theme.Material
, o Forçar modo escuro não é.
aplicada. Da mesma forma, se o tema do seu app herdar de um tema DayNight
, Forçar
O modo escuro não é aplicado devido à troca automática de temas.
Desativar o Forçar modo escuro em uma visualização
O recurso "Forçar modo escuro" pode ser controlado em visualizações específicas com o
atributo de layout android:forceDarkAllowed
ou com
setForceDarkAllowed()
.
Conteúdo da Web
Para ver informações sobre como usar temas escuros no conteúdo baseado na Web, consulte Escurecer conteúdo da Web com WebView. Para um exemplo de tema escuro aplicado a uma WebView, veja a demonstração do WebView em GitHub (em inglês) ,
Práticas recomendadas
As seções a seguir demonstram as práticas recomendadas para implementar temas escuros.
Notificações e widgets
Para superfícies de interface que você exibe no dispositivo, mas não controla diretamente, faça verifique se todas as visualizações usadas refletem o tema do aplicativo host. Dois exemplos são notificações e widgets na tela de início.
Notificações
Use os modelos de notificação fornecidos pelo sistema, como MessagingStyle
. Isso
significa que o sistema é responsável por aplicar o estilo de visualização correto.
Widgets e visualizações de notificações personalizadas
No caso de widgets na tela de início ou se o app usa visualizações personalizadas de conteúdo de notificação, testar o conteúdo nos temas claro e escuro.
Os problemas mais comuns a serem observados incluem:
- Pressupondo que a cor de fundo seja sempre clara.
- Fixar as cores do texto no código.
- Definir uma cor de plano de fundo fixada no código ao usar a cor de texto padrão.
- Usar um ícone drawable de uma cor estática.
Em todos esses casos, use atributos de tema apropriados em vez de fixados no código cores.
Telas de inicialização
Caso seu app tenha uma tela de inicialização personalizada, talvez seja necessário modificá-la para que ela reflete o tema selecionado.
Remova todas as cores fixadas no código, como as cores de fundo definidas programaticamente como
branco. Em vez disso, use o atributo de tema ?android:attr/colorBackground
.
Mudanças de configuração
Quando o tema do aplicativo muda, seja por meio da configuração do sistema ou do AppCompat, ele
aciona um uiMode
.
mudança de configuração. Isso significa que as atividades são recriadas automaticamente.
Em alguns casos, você pode querer que um app processe a mudança de configuração. Por exemplo, é recomendável atrasar uma mudança de configuração quando um vídeo está sendo exibido.
Um app pode processar a implementação do tema escuro declarando que cada
Activity
pode processar a mudança de configuração de uiMode
:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Quando um Activity
declara que processa mudanças de configuração, o
onConfigurationChanged()
é chamado quando há uma alteração no tema.
Para verificar qual é o tema atual, os apps podem executar códigos como este:
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; }