TL, DR;
ContextCompat.getColor()
não usa as cores noturnas ( values-night/colors.xml
) como deveria quando o modo noturno está ativado.
Aqui está o problema:
Olá a todos,
Então, estou implementando um tema sombrio para o meu aplicativo Android. Chamo isso para ativá-lo:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
Eu configurei as cores values/colors.xml
e a versão está escura values-night/colors.xml
. As cores mudam bem, dependendo do nightMode, MAS:
quando uso ContextCompat.getColor(getApplicationContext(), R.id.myColor)
, usa as cores normais ( values/colors.xml
) e não as noturnas ( values-night/colors.xml
).
No meu build.gradle
, eu defini estes:
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0-beta01'
Alguém poderia me dizer o que estou fazendo de errado?
PS: Eu já olhei para a seguinte pergunta e ela não responde a esse problema /programming/57779661/contextcompat-getcolor-method-ignores-night-mode
fonte
ContextCompat.getColor()
retornamos valores válidos depois de forçar o modo noturno. Você pode elaborar sua pergunta com um trecho de código (quando você altera o modo noturno / obtém a cor)?Respostas:
Eu enfrentei problemas semelhantes no modo noturno. Algumas telas eram boas, mas outras mantinham o tema regular. No final, descobri que estava instanciando algumas visualizações usando o contexto do Aplicativo em vez do contexto de atividade atual. Por alguma razão, o contexto do aplicativo não rastreia esse tipo de informação.
Portanto, atualize seu código para usar o contexto de atividade atual em vez do contexto do aplicativo.
Para referência para outros usuários. Evitar:
E use:
fonte
Application
é um contexto "bruto", ele sempre fará referência a valores do estilo padrão e desconsiderará qualquer configuração.AppCompatActivity
por outro lado, lida com configurações adequadas e está vinculadoAppCompatDelegate
.