TL, DR;
ContextCompat.getColor()
no usa los colores nocturnos ( values-night/colors.xml
) aunque debería hacerlo cuando el modo nocturno está habilitado.
Aquí está el problema:
Hola a todos,
Así que estoy implementando un tema oscuro para mi aplicación de Android, llamo a esto para habilitarlo:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
He establecido colores values/colors.xml
y hay una versión oscura values-night/colors.xml
. Los colores cambian bien dependiendo del modo nocturno, PERO:
cuando lo uso ContextCompat.getColor(getApplicationContext(), R.id.myColor)
, usa los colores normales ( values/colors.xml
) y no los colores nocturnos ( values-night/colors.xml
).
En mi build.gradle
, he establecido estos:
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0-beta01'
¿Podría alguien decirme qué estoy haciendo mal?
PD: ya miré la siguiente pregunta y no responde a este problema /programming/57779661/contextcompat-getcolor-method-ignores-night-mode
fuente
ContextCompat.getColor()
devuelvo valores válidos después de forzar el modo nocturno. ¿Puedes elaborar tu pregunta con un fragmento de código (cuando cambias el modo nocturno / obtienes color)?Respuestas:
Me enfrenté a problemas similares con el modo nocturno. Algunas pantallas estaban bien, pero otras mantenían el tema regular. Al final, descubrí que estaba creando instancias de algunas vistas usando el contexto de la Aplicación en lugar del contexto de actividad actual. Por alguna razón, el contexto de la Aplicación no rastrea este tipo de información.
Por lo tanto, actualice su código para usar el contexto de actividad actual en lugar del contexto de la aplicación.
Para referencia para otros usuarios. Evitar:
Y use:
fuente
Application
es un contexto "en bruto", siempre hará referencia a valores del estilo predeterminado y no tendrá en cuenta ninguna configuración.AppCompatActivity
por otro lado maneja configuraciones apropiadas y está vinculado aAppCompatDelegate
.