TL, DR;
ContextCompat.getColor()
verwendet nicht die Nachtfarben ( values-night/colors.xml
), obwohl dies der Fall sein sollte, wenn der Nachtmodus aktiviert ist.
Hier ist das Problem:
Hallo allerseits,
Ich implementiere also ein dunkles Thema für meine Android-App. Ich nenne dies, um es zu aktivieren:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
Ich habe Farben eingestellt values/colors.xml
und dort dunkle Version in values-night/colors.xml
. Die Farben ändern sich je nach Nachtmodus gut, ABER:
Wenn ich benutze ContextCompat.getColor(getApplicationContext(), R.id.myColor)
, werden die normalen Farben ( values/colors.xml
) und nicht die Nachtfarben ( values-night/colors.xml
) verwendet.
In meinem habe build.gradle
ich diese eingestellt:
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0-beta01'
Könnte mir bitte jemand sagen, was ich falsch mache?
PS: Ich habe mir bereits die folgende Frage angesehen und sie beantwortet dieses Problem nicht. Https://stackoverflow.com/questions/57779661/contextcompat-getcolor-method-ignores-night-mode
quelle
ContextCompat.getColor()
nach dem Erzwingen des Nachtmodus gültige Werte zurück. Können Sie Ihre Frage mit einem Code-Snippet ausarbeiten (wenn Sie den Nachtmodus ändern / Farbe erhalten)?Antworten:
Ich hatte ähnliche Probleme mit dem Nachtmodus. Einige Bildschirme waren in Ordnung, andere behielten das reguläre Thema bei. Am Ende stellte ich fest, dass ich einige Ansichten mithilfe des Anwendungskontexts anstelle des aktuellen Aktivitätskontexts instanziierte. Aus irgendeinem Grund verfolgt der Anwendungskontext diese Art von Informationen nicht.
Aktualisieren Sie also Ihren Code, um den aktuellen Aktivitätskontext anstelle des Anwendungskontexts zu verwenden.
Als Referenz für andere Benutzer. Vermeiden:
Und benutze:
quelle
Application
Wenn es sich um einen "rohen" Kontext handelt, werden immer Werte aus dem Standardstil referenziert und Konfigurationen ignoriert.AppCompatActivity
Auf der anderen Seite werden die richtigen Konfigurationen verarbeitet und mit verknüpftAppCompatDelegate
.