
Das dunkle Design ist ab Android 10 (API-Level 29) verfügbar. Es hat die die folgenden Vorteile:
- Reduziert den Stromverbrauch je nach Bildschirmtechnologie des Geräts erheblich.
- Verbessert die Sichtbarkeit für Nutzer mit eingeschränktem Sehvermögen und solche, die empfindlich auf helles Licht.
- Erleichtert die Nutzung eines Geräts bei schlechten Lichtverhältnissen.
Das dunkle Design gilt für die Android-Systembenutzeroberfläche und für Apps, die auf dem Gerät ausgeführt werden.
Es gibt drei Möglichkeiten, das dunkle Design in Android 10 und höher zu aktivieren:
- Wenn Sie das dunkle Design verwenden möchten, gehen Sie zu Einstellungen > Display > Design und aktivieren Sie die entsprechende Option.
- Wenn die Funktion aktiviert ist, können Sie über die Kachel „Schnelleinstellungen“ im Benachrichtigungs-Steuerfeld zwischen den Themen wechseln.
- Pixel-Geräte: Aktivieren Sie den Energiesparmodus, damit das dunkle Design . Andere Geräte unterstützen dieses Verhalten möglicherweise nicht.
Anleitungen zum Anwenden eines dunklen Designs auf webbasierte Inhalte mithilfe von WebView -Komponente, siehe Webinhalte in WebView dunkler machen.
Dunkles Design in Ihrer App unterstützen
Wenn Sie das dunkle Design unterstützen möchten, legen Sie das Design Ihrer App – normalerweise unter res/values/styles.xml
– so fest, dass es von einem DayNight
-Design übernommen wird:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
Sie können auch das dunkle Material Components-Design verwenden:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Dadurch wird das Hauptdesign der App an die vom System gesteuerten Flags für den Nachtmodus gebunden und die App erhält ein standardmäßiges dunkles Design, wenn der Modus aktiviert ist.
Designs und Stile
Verwenden Sie keine hartcodierten Farben oder Symbole, die für ein helles Design bestimmt sind. Verwenden Sie stattdessen Themenattribute oder Ressourcen mit Nachtqualifikation.
Für das dunkle Design sind zwei Designattribute am wichtigsten:
?android:attr/textColorPrimary
: eine allgemeine Textfarbe. Im hellen Design ist sie fast schwarz und im dunklen Design fast weiß. Sie enthält einen deaktivierten Status.?attr/colorControlNormal
: eine allgemeine Symbolfarbe. Sie enthält einen deaktivierten Status.
Wir empfehlen, Material Design
Komponenten, da das zugehörige Farbdesign
System wie das Theme
die Attribute ?attr/colorSurface
und ?attr/colorOnSurface
Farben zu wählen. Sie können diese Attribute in Ihrem Design anpassen.
Designs in der App ändern
Sie können Nutzern erlauben, das Design der App zu ändern, während die App ausgeführt wird. Wir empfehlen folgende Optionen:
- Leicht
- Dunkel
- Systemstandardeinstellung (empfohlene Standardoption)
Diese Optionen lassen sich direkt den AppCompat.DayNight
-Modi zuordnen:
Licht:
MODE_NIGHT_NO
Dunkel:
MODE_NIGHT_YES
Systemstandard:
MODE_NIGHT_FOLLOW_SYSTEM
So wechseln Sie das Design:
Verwenden Sie ab API-Level 31
UiModeManager#setApplicationNightMode
um dem System mitzuteilen, welches Design in Ihrer App ausgeführt wird. So kann das System die das Design während des Ladebildschirms ändern.Bei API-Level 30 und niedriger verwenden Sie
AppCompatDelegate.setDefaultNightMode()
um das Design zu wechseln.
Dunkles Design erzwingen
Android 10 bietet Dunkles Design erzwingen, eine Funktion, mit der Entwickler schnell ein dunkles Design implementieren können, ohne explizit ein DayNight
-Design festzulegen.
„Force Dark“ analysiert jede Ansicht deiner hellen App und wendet ein dunkles Design an bevor es auf dem Bildschirm erscheint. Sie können eine Mischung aus „Force Dark“ und nativer Implementierung verwenden, um die Zeit für die Implementierung des dunklen Designs zu verkürzen.
Apps müssen die Funktion „Dunkles Design erzwingen“ aktivieren, indem sie android:forceDarkAllowed="true"
im Design der Aktivität festlegen. Dieses Attribut wird für alle vom System und von AndroidX bereitgestellten hellen Designs festgelegt, z. B. Theme.Material.Light
. Wenn Sie „Force Dark“ verwenden, testen Sie Ihre App gründlich und schließen Sie bei Bedarf Ansichten aus.
Wenn Ihre App ein dunkles Design verwendet, z. B. Theme.Material
, wird „Dunkeles Design erzwingen“ nicht angewendet. Wenn das Design Ihrer App von einem DayNight
-Design übernommen wird,
Das dunkle Design wird aufgrund des automatischen Designwechsels nicht angewendet.
„Dunkles Design erzwingen“ für eine Ansicht deaktivieren
Die Funktion „Force Dark“ kann für bestimmte Ansichten mit dem Layoutattribut android:forceDarkAllowed
oder mit setForceDarkAllowed()
gesteuert werden.
Webinhalt
Informationen zur Verwendung dunkler Designs in webbasierten Inhalten finden Sie unter Webinhalte in WebView verdunkeln. Ein Beispiel für ein dunkles Design, das auf eine WebView angewendet wird, finden Sie in der WebView-Demo auf GitHub.
Best Practices
In den folgenden Abschnitten finden Sie Best Practices für die Implementierung von dunklen Designs.
Benachrichtigungen und Widgets
Aktivieren Sie für UI-Oberflächen, die auf dem Gerät angezeigt, aber nicht direkt gesteuert werden, Achten Sie darauf, dass alle verwendeten Ansichten zum Thema der Host-App passen. Zwei Beispiele sind Benachrichtigungen und Launcher-Widgets.
Benachrichtigungen
Verwenden Sie die vom System bereitgestellten Benachrichtigungsvorlagen wie MessagingStyle
. Dieses
bedeutet, dass das System für die Anwendung des richtigen Ansichtsstils verantwortlich ist.
Widgets und Ansichten für benutzerdefinierte Benachrichtigungen
Testen Sie die Inhalte von Launcher-Widgets oder benutzerdefinierten Benachrichtigungsinhalten sowohl im hellen als auch im dunklen Design.
Häufige Fallstricke:
- Vorausgesetzt, die Hintergrundfarbe ist immer hell.
- Textfarben hartcodieren.
- Festlegen einer hartcodierten Hintergrundfarbe bei Verwendung der Standardtextfarbe
- Ein gezeichnetes Symbol mit einer statischen Farbe verwenden
Verwenden Sie in all diesen Fällen geeignete Themenattribute statt hartcodierter Farben.
Startbildschirme
Wenn Ihre App über einen benutzerdefinierten Startbildschirm verfügt, müssen Sie ihn möglicherweise so ändern, das dem ausgewählten Design entspricht.
Entfernen Sie alle hartcodierten Farben, z. B. Hintergrundfarben, die programmatisch auf „Weiß“ gesetzt sind. Verwenden Sie stattdessen das Attribut „?android:attr/colorBackground
“ für das Design.
Konfigurationsänderungen
Wenn sich das Design der App ändert, entweder über die Systemeinstellung oder AppCompat, wird eine uiMode
-Konfigurationsänderung ausgelöst. Das bedeutet, dass Aktivitäten automatisch neu erstellt werden.
In einigen Fällen kann es sinnvoll sein, die Konfigurationsänderung von einer App auszuführen. So können Sie beispielsweise eine Konfigurationsänderung verzögern, weil gerade ein Video wiedergegeben wird.
Eine App kann die Implementierung des dunklen Designs übernehmen, indem sie deklariert, dass jedes
Activity
kann die uiMode
-Konfigurationsänderung verarbeiten:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Wenn ein Activity
angibt, dass es Konfigurationsänderungen verarbeitet, wird seine Methode onConfigurationChanged()
aufgerufen, wenn es zu einer Themenänderung kommt.
Um das aktuelle Design zu überprüfen, können Apps Code wie den folgenden ausführen:
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. }
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; }