Dark theme é uma forma de personalização no Android que permite alterar as cores de um aplicativo para tons escuros, podendo reduzir o consumo de energia. Os desenvolvedores podem implementá-lo nativamente ou forçar o tema escuro, além de precisarem testar e adaptar as cores e ícones para funcionar nos modos claro e escuro.
3. O que é?
- É mais uma forma de personalização
no Android. Surgiu parcialmente na
versão 9 e agora chegou 100% na
versão 10. Com um tema escuro,
pode ser totalmente preto ou com
tons mais claros do preto (grafite).
- Lançado no Google I/O 2019
- Pode ser aplicado de forma nativa
(seguindo o tema atual do sistema).
Automatica, seguindo o horário do
dispositivo. Ou até mesmo
"forçada", setando a opção nas
configurações do app.
- Suporte completo apenas a partir do
target-sdk 29 (Android Q)
5. Como ativar?
- Toggle de atalhos na barra de notificações
- Configurações do sistema
- Nos aparelhos Pixel, ligando o modo de Economia de Bateria (em outras customizações, pode
ou não ser compatível o mesmo comportamento)
Pixel (Stock) Samsung (One UI) Xiaomi (MIUI 10) Huawei (EMUI 9)
6. Como ativar?
- Toggle de atalhos na barra de notificações
- Configurações do sistema
- Nos aparelhos Pixel, ligando o modo de Economia de Bateria (em outras customizações, pode ou não ser
compatível o mesmo comportamento)
Pixel (Stock) Samsung (One UI) Xiaomi (MIUI 10) Huawei (EMUI 9)
7. Outras Versões
- Suporte 100% ao dark theme, a
partir do Android 10 apenas
- Versões anteriores, você pode dar
suporte parcial através da opção
"bateria fraca", vinculando uma
opção nas configurações do seu
aplicativo a esta opção.
8. Benefícios
- Pode reduzir significativamente o consumo de
energia (dependendo da tecnologia da tela do
dispositivo).
- Melhora a visibilidade para usuários com
baixa visão e aqueles que são sensíveis à luz
brilhante.
- Facilita o uso do dispositivo em um ambiente
com pouca luz.
10. Implementação
- herdar "DayNight" no seu tema para quando o tema escuro estiver ativado
- com support Library
- com material Component
- para forçar sempre o tema escuro, usar "forceDarkAllowed" no seu
AppTheme Light
12. Versões Anteriores
Cada uma das opções é mapeada diretamente para um dos modos
AppCompat.DayNight:
- Claro: MODE_NIGHT_NO
- Escuro: MODE_NIGHT_YES
- Definido pela Economia de bateria: MODE_NIGHT_AUTO_BATTERY
- Padrão do sistema: MODE_NIGHT_FOLLOW_SYSTEM
Para alternar o tema, chame AppCompatDelegate.setDefaultNightMode().
13. Ui Mode
- No Manifest, precisamos adicionar a propriedade configChanges na tag de
atividade no Manifest e ele manipulará as alterações na configuração.
- Em alguns casos, pode ser necessário que um app processe a alteração de
configuração. Por exemplo, é recomendável atrasar uma alteração de
configuração porque um vídeo está sendo mostrado.
- Um app pode processar a implementação do tema escuro declarando que
cada atividade pode processar a alteração de configuração uiMode:
14. Ui Mode
- Quando uma atividade declara que processa alterações de configuração, o
método onConfigurationChanged() dela será chamado quando houver uma
alteração de tema.
- Para verificar qual é o tema atual, os apps podem executar códigos como
este:
15. Práticas Recomendadas
Notificações:
- Use os modelos de notificação fornecidos pelo sistema (como
MessagingStyle). Isso significa que o sistema é responsável por garantir que
o estilo de visualização correto seja aplicado.
Widgets e visualizações de notificações personalizadas
- No caso de widgets de tela de início ou de apps com visualizações de
notificações personalizadas, é importante testar o conteúdo em temas claros
e escuros.
16. Observações
- Temas e estilos precisam evitar cores ou ícones "fixas"
- É preciso usar atributos de tema (de preferência) ou atributos flexíveis para se
adaptarem também ao tema escuro.
- Se você deseja substituir a cor no aplicativo, é necessário criar um diretório de
valores personalizado, chamado e, para recursos de imagem, criaremos
.
- Para componentes IU que você não controla diretamente, é importante garantir que
todas as visualizações usadas reflitam o tema atual do app Dois bons exemplos são
as notificações e os widgets da tela de início.
- Se seu app tiver uma tela inicial personalizada, talvez seja necessário modificá-la
para que reflita o tema selecionado.
- Use o atributo de tema ?android:attr/colorBackground. Os drawables de tema
escuro android:windowBackground só funcionam no Android Q.
17. Erros Comuns
Alguns erros comuns:
- Supor que a cor do plano de fundo seja
sempre clara
- Fixar cores do texto no código
- Definir uma cor de plano de fundo
codificada ao usar a cor de texto padrão
- Usar um ícone drawable que seja uma cor
estática
Em todos esses casos, use atributos de tema
apropriados em vez de cores codificadas.