Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
Vorwort
Teil I Grundlagen
1 Android – eine offene, mobile Plattform
2 Hallo Android!
3 Von der Idee zur Veröffentlichung
Teil II Elementare Anwendungsbausteine
4 Wichtige Grundbausteine von Apps
5 Benutzeroberflächen
6 Multitasking
Teil III Gerätefunktionen nutzen
7 Telefonieren und surfen
8 Sensoren, GPS und Bluetooth
Teil IV Dateien und Datenbanken
9 Dateien lesen, schreiben und drucken
10 Datenbanken
Teil V Multimedia und Produktivität
11 Multimedia
12 Kontakte und Organizer
A Einführung in Kotlin
B Jetpack Compose
C Häufig benötigte Codebausteine
D Literaturverzeichnis
E Die Begleitmaterialien
Stichwortverzeichnis

Ihre Meinung?
Spacer
<< zurück
Android 11 von Thomas Künneth
Das Praxisbuch für App-Entwickler
Buch: Android 11

Android 11
Pfeil 5 Benutzeroberflächen
Pfeil 5.1 Views und ViewGroups
Pfeil 5.1.1 Views
Pfeil 5.1.2 Positionierung von Bedienelementen mit ViewGroups
Pfeil 5.1.3 Alternative Layouts
Pfeil 5.2 Vorgefertigte Bausteine für Oberflächen
Pfeil 5.2.1 Listen darstellen mit ListFragment
Pfeil 5.2.2 Programmeinstellungen mit dem PreferencesFragment
Pfeil 5.2.3 Dialoge
Pfeil 5.2.4 Menüs und Action Bar
Pfeil 5.3 Nachrichten und Hinweise
Pfeil 5.3.1 Toast und Snackbar
Pfeil 5.3.2 Benachrichtigungen
Pfeil 5.3.3 App Shortcuts
Pfeil 5.4 Trennung von Oberfläche und Logik
Pfeil 5.4.1 Bedienelemente ohne »findViewById()«
Pfeil 5.4.2 Android Architecture Components
Pfeil 5.5 Dark Mode
Pfeil 5.5.1 Das DayNight-Theme
Pfeil 5.5.2 Dark Mode in eigenen Themes
Pfeil 5.6 Zusammenfassung
 
Zum Seitenanfang

5.5    Dark Mode Zur vorigen ÜberschriftZur nächsten Überschrift

Mit Android 10 hat Google einen systemweiten Dunkelmodus eingeführt. System UI und Apps werden auf Wunsch (ab Android 11 auch zeitgesteuert) dunkel dargestellt. Je nach Displaytechnologie lässt sich mit dem Dark Mode einiges an Strom sparen. Außerdem wird die Bedienung bei wenig Licht erleichtert. Schließlich empfinden viele einen dunklen Hintergrund als augenschonend. Neu sind dunkle Oberflächen in Android aber nicht. Insbesondere die frühen Versionen enthielten viele schwarze, blaue und graue Elemente.

 
Zum Seitenanfang

5.5.1    Das DayNight-Theme Zur vorigen ÜberschriftZur nächsten Überschrift

Damit Ihre App das dunkle Design gut unterstützt, sollte sie auf einem DayNight-Theme basieren. Es wird in der Manifestdatei mit dem Attribut android:theme="@style/ ... " festgelegt. Die Definition des Themes befindet sich üblicherweise in der Datei res/values/styles.xml.

<resources>
<style name="AppTheme"
parent="Theme.AppCompat.DayNight.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="myOwnColor">@color/myOwnColor</item>
</style>
</resources>

Listing 5.45    Die Datei »styles.xml«

Mein Beispiel leitet von Theme.AppCompat.DayNight ab. Wenn Sie die Material Components verwenden, können Sie stattdessen Theme.MaterialComponents.DayNight verwenden. Wichtig ist, nach Möglichkeit keine hartkodierten Farben und Icons speziell für helle Designs vorzusehen, sondern vorhandene Theme-Attribute und für den Dark Mode geeignete Ressourcen zu verwenden. textColorPrimary ist eine Allzwecktextfarbe. In hellen Designs erscheint sie fast schwarz, im Dunkelmodus hingegen fast weiß. colorControlNormal ist gut als Allzweckfarbe für Icons geeignet. Wie Sie beide verwenden, ist in Listing 5.46 zu sehen. Die Layoutdatei gehört zu meinem Beispiel DarkModeDemo.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
...
tools:context=
".DarkModeDemoActivity">

<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/hello"
android:textColor="?attr/myOwnColor"
android:textSize="16pt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:contentDescription="@null"
android:src="@drawable/ic_android_black_24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textview1"
app:srcCompat="@android:drawable/sym_def_app_icon"
app:tint="?attr/colorControlNormal" />

<TextView
android:id="@+id/textview2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/hello"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16pt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageview" />

</androidx.constraintlayout.widget.ConstraintLayout>

Listing 5.46    Verwendung von »colorControlNormal« und »textColorPrimary«

Die App stellt zweimal den Text »Hallo Android« sowie ein Icon dar. In Abbildung 5.20 sind die Unterschiede bei der Hintergrund- und Iconfarbe sowie dem zweiten Text gut zu erkennen. Auf Papier nicht so schön zu sehen sind hingegen die verschiedenen Farben des ersten Textes. Dessen Farbe wird mit android:textColor="?attr/myOwnColor" gesetzt. Bei aktiviertem Dunkelmodus ist das Grün, sonst Rot.

Die App »DarkModeDemo«

Abbildung 5.20    Die App »DarkModeDemo«

Die Definition erfolgt in mehreren Stufen. Zuerst wird das Attribut in der Datei attr.xml (Listing 5.47) eingetragen. Sie befindet sich im Verzeichnis res/values. Möglicherweise müssen Sie die Datei erst anlegen. Klicken Sie hierzu im Werkzeugfenster Project auf den Knoten values und wählen dann New • File.

<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="myOwnColor" format="reference|color" />
</resources>

Listing 5.47    Die Datei »attr.xml«

Attribute haben einen Namen und ein Format. Mit Letzterem legen Sie den Wertebereich und den Typ fest. Nun können wir dem Attribut einen Wert zuweisen. Da es sich um eine Farbe handelt, tragen wir die Definition in die Datei colors.xml ein. Sie wurde vom Assistenten zum Anlegen neuer Projekte unter values abgelegt.

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
<color name="myOwnColor">#ff0000</color>
</resources>

Listing 5.48    Die Datei »colors.xml«

In Listing 5.48 setze ich den Wert von myOwnColor auf #ff0000. Das entspricht der Farbe Rot. Damit im Dunkelmodus Grün erscheint, muss es hierfür natürlich ebenfalls eine Definition geben. Wie unter Android üblich, greift hier das Konzept der alternativen Ressourcen. Konkret wird eine zweite Version der Datei colors.xml im Verzeichnis res/values-night abgelegt. Da es nicht automatisch erzeugt wird, müssen Sie es von Hand anlegen. Klicken Sie mit der rechten Maustaste auf den Knoten res und wählen dann File • Directory.

Wenn Sie wie in meinem Beispiel Vektorgrafiken als Icons im Optionsmenü verwenden, können Sie auch deren Farbe an den Dunkelmodus anpassen. Hierzu müssen Sie nur in der .xml-Datei der Grafik das Attribut android:tint="@color/ ... " einfügen (Listing 5.49).

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/myOwnColor"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData=" ... " />
</vector>

Listing 5.49    Vektorgrafik, die sich an den Dunkelmodus anpasst

 
Zum Seitenanfang

5.5.2    Dark Mode in eigenen Themes Zur vorigen ÜberschriftZur nächsten Überschrift

Wenn das Theme Ihrer App nicht von DayNight ableitet, können Sie das dunkle Design trotzdem unterstützen. Diese Force Dark genannte Funktion wird mit android:forceDarkAllowed="true" im Theme der App oder Activity aktiviert. Alle hellen System- und AndroidX-Designs, zum Beispiel Theme.Material.Light, setzen es. Bei der Verwendung von dunklen Designs (beispielsweise Theme.Material) wird Force Dark hingegen nicht aktiv. Ist die Funktion eingeschaltet, analysiert Android vor dem Zeichnen jede View und wendet den Dunkelmodus an, sofern das in der Layoutdatei mit android:forceDarkAllowed oder im Code nicht mit forceDarkAllowed = ... deaktiviert wird.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
Zur Rheinwerk-Konferenz für Kotlin
 Buchempfehlungen
Zum Rheinwerk-Shop: Kotlin

Kotlin


Zum Rheinwerk-Shop: Praxisbuch Usability und UX

Praxisbuch Usability und UX


Zum Rheinwerk-Shop: Flutter und Dart

Flutter und Dart


Zum Rheinwerk-Shop: App-Design

App-Design


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2023
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern