Die Übersetzung des Artikels wurde speziell für Studenten des Kurses "Android-Entwickler" vorbereitet . Grundkurs . " Wir erinnern Sie auch daran, dass wir uns weiterhin für den Fortgeschrittenenkurs "Spezialisierung Android-Entwickler" anmelden.
Datenschutz und Sicherheit finden Sie im ersten Teil des Artikels.
2) Benutzererfahrungen
a) Navigationsgesten

In Android Q hat Google versucht, alle Navigationsgesten mit dem neuen Navigationsgestensystem zu kombinieren, das die schwebende Navigationsleiste (Zurück, Startseite und aktuelle Apps) ersetzt.
- Was sich auswirkt: Wenn Ihre Anwendung Gesten enthält, können diese mit Systemgesten in Konflikt stehen. Dies betrifft alle Anwendungen, die unter Android Q ausgeführt werden (unabhängig vom Ziel-SDK), da Systemgesten zuerst verarbeitet werden.
- Empfohlener Ansatz: Da die schwebende Navigationsleiste praktisch verschwunden ist, wird empfohlen, den verfügbaren neuen Bildschirmbereich vollständig zu nutzen und den Benutzern einen umfassenden Effekt zu bieten.
Um einen immersiven Effekt zu erzielen, müssen Anwendungen hinter der Statusleiste und der Navigationsleiste angezeigt werden. Machen Sie zunächst die Statusleiste und die Navigationsleiste transparent.
<style name="AppTheme"> ...... <item name="android:navigationBarColor">@android:color/transparent</item> <!-- Optional, but recommended for full edge-to-edge rendering --> <item name="android:statusbarColor">@android:color/transparent</item> </style>
Als Nächstes wird die
Activity/View
im Vollbildmodus angezeigt:
view.systemUiVisibility =

FAB (Floating Action Button) wird von einer schwebenden Navigationsleiste abgedeckt. Eine schwebende Navigationsleiste dient der Übersichtlichkeit.
Nachdem die Anwendung im Vollbildmodus hinter den (transparenten) Systemkomponenten angezeigt wird, ist es möglich, dass eine Art interaktive Anwendungskomponente von der Systembenutzeroberfläche blockiert wird. Verwenden Sie Insets, um dieses Problem zu lösen.
Einfügungen sind eine Reihe von Werten, die angeben, um wie viel die Ansicht verschoben werden soll, damit sie nicht mit der Systembenutzeroberfläche in Konflikt stehen. Diese Informationen werden von der
WindowInset- Klasse
bereitgestellt . Ab API 20 stellt Android Entwicklern Systemfenster-Einfügungen zur Verfügung, die Ihnen mitteilen, wie viel Platz Systemkomponenten (wie die schwebende Navigationsleiste und die Statusleiste) belegen. Diese Informationen können verwendet werden, um die interaktive Ansicht so zu verschieben, dass der Benutzer darauf und nicht auf die Systembenutzeroberfläche tippt.
root.setOnApplyWindowInsetsListener { _, insets -> val fabLp = fab.layoutParams as CoordinatorLayout.LayoutParams fabLp.bottomMargin = fabOriginalBottomMargin + insets.systemWindowInsetBottom fab.layoutParams = fabLp insets.consumeSystemWindowInsets() }
Legen Sie für FAB den WindowsInsets-Listener fest und wenden Sie den unteren Fenstereinsatz als unteren Einzug an.
In ähnlicher Weise bietet das System ab Android Q Navigationsgesten-Insets zum Verschieben von Wischansichten, damit diese nicht mit Systemgesten in Konflikt stehen. Sie werden über Insets.getSystemGestureInsets () bereitgestellt
Bereiche von Systemgesten werden gelb hervorgehoben.Was aber, wenn wir die Ansicht nicht verschieben und Inhalte in den Gestenbereichen platzieren möchten, die möglicherweise mit der Anwendung in Konflikt stehen? In diesen Szenarien kann die Anwendung die Bereiche bestimmen, in denen die Anwendung zuerst das Berührungsereignis behandelt, anstatt Systemgesten. Dies kann durch Übergeben von
List<
Rect >
an die
View.setSystemGestureExclusionRects () -API in Android Q erfolgen. Diese Methode ist auch in
ViewCompat mit
androidx.core:core:1.1.0
verfügbar.
- Fallstricke: Sie können sich weigern, nur Rückgesten zu verarbeiten. Die Grenzen der "Heim" -Geste sind reserviert und können nicht neu definiert werden. Dies liegt daran, dass es nur einen Weg gibt, die Anwendung zu beenden. Wenn Ihre Anwendung mit der Geste "Home" in Konflikt steht, verwenden Sie
WindowInsets.getMandatorySystemGestureInsets()
, um die Rahmen WindowInsets.getMandatorySystemGestureInsets()
und Ihre Ansicht zu verschieben.
b) Dunkles Thema
Im letzten Jahr haben viele Anwendungen begonnen, dunkle Themen zu unterstützen. Android Q fügt diesen Schalter den Systemeinstellungen hinzu.
Der Benutzer kann das dunkle Thema auf drei Arten aktivieren:
- Ein neues Element in den Systemeinstellungen (Einstellungen -> Anzeige -> Thema)
- Neues Element in den Schnelleinstellungen
- Je nach Hersteller kann es über den Energiesparmodus eingeschaltet werden.
Um die systemweite Konfiguration von Dark Theme zu unterstützen, sollte das Standarddesign Ihrer Anwendung vom DayNight-Design erben. Dies verbindet das Hauptthema der Anwendung mit den vom System gesteuerten Nachtmodus-Flags. Dies funktioniert durch Extrahieren von Ressourcen aus den
night
.
<!--App Compat Style--> <style name="AppTheme" parent="Theme.AppCompat.DayNight"> <!--Material Components--> <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Wenn Sie sich die App Compat-Stile ansehen, werden Sie feststellen, dass das DayNight-Design in der Standardkonfiguration auf AppCompat Light und in der Nachtkonfiguration auf AppCompat verweist.
<!--values/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat.Light"> <!--values-night/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat">
Wenn Sie Benutzern die Möglichkeit geben möchten, das Thema innerhalb der Anwendung zu steuern, können Sie
AppCompatDelegate.setDefaultNightMode () aufrufen, das einen von vier Modi akzeptiert:
MODE_NIGHT_YES
- Dunkles Thema MODE_NIGHT_YES
MODE_NIGHT_NO
- Zeigt ein helles Thema anMODE_NIGHT_FOLLOW_SYSTEM
- Befolgen Sie die SystemeinstellungenMODE_NIGHT_AUTO_BATTERY
- MODE_NIGHT_AUTO_BATTERY
dunkles Thema, wenn das Gerät in den Energiesparmodus wechselt.
a) Codieren Sie die Farben nicht fest. Wenn die Layoutdateien fest codierte Farben enthalten, ist dies ein Weckruf. Ersetzen Sie sie durch Links zur
color
. Noch besser: Verwenden Sie Attribute, um sich auf Farben zu beziehen.
b) Überprüfen Sie die Bilder und stellen Sie ihnen im Rahmen des
night
alternative Ressourcen zur Verfügung.
c) In Vektorzeichnungen sollten keine hartbeschichteten Farben enthalten sein. Verwenden Sie den
tint
, um Vektorressourcen mit der richtigen Farbe zu formatieren.
d) values-night/colors.xml
Sie sicher, dass alle
values-night/colors.xml
entsprechende Alternativen im
values-night/colors.xml
(
values-night/colors.xml
).
e) Wenn eine Anwendung RemoteViews für Benachrichtigungen oder Widgets verwendet, müssen Sie diese auch testen. Es ist gut, wenn die Anwendung die Standardbenachrichtigungsstile verwendet, da das System sie dann verarbeitet.
f) Eine Konfigurationsänderung für
uiMode
wird immer dann aufgerufen, wenn das Gerät zwischen Normal- und
uiMode
wechselt. Der Benutzer kann dies manuell tun oder den Energiesparmodus aktivieren. Wenn die Anwendung Konfigurationsänderungen nicht ordnungsgemäß verarbeitet, verliert die Benutzeroberfläche den Kontext, wenn das Gerät zwischen normalem und dunklem Modus wechselt, da sichtbare Aktivitäten und ihre Fragmente zerstört und neu erstellt werden. Fügen Sie daher Unterstützung für Konfigurationsänderungen hinzu, auch wenn die Benutzeroberfläche in derselben Ausrichtung gesperrt ist. Wenn die Anwendung Konfigurationsänderungen manuell über
android:configChanges
, besteht außerdem eine hohe Wahrscheinlichkeit, dass Sie
uiMode
auch manuell verwalten
uiMode
. Wenn eine Anwendung beispielsweise die kontinuierliche Wiedergabe (Videoplayer) verwendet, möchte sie die Wiedergabe möglicherweise nicht unterbrechen, nur weil das Gerät zwischen Normal- und Dunkelmodus umgeschaltet hat.
Android Q führte auch viele andere Dinge ein, die ich nicht im Detail besprochen habe, wie das Einstellungsfenster und die neue AudioPlaybackCapture-API (die API ermöglicht es Anwendungen, den von anderen Anwendungen wiedergegebenen Sound zu kopieren. Diese Funktion ähnelt der Bildschirmaufnahme, jedoch für Audio).
Schließlich enthält Android Q eine aktualisierte Liste begrenzter nicht SDK-spezifischer Schnittstellen, denen letztendlich der Zugriff über das Android SDK verweigert werden kann. Eine Liste Ihrer Verstöße finden Sie in der Wiedergabekonsole im Abschnitt „Bericht vor dem Start“.
Das ist alles. Wenn Sie der Meinung sind, dass es etwas Wichtiges gibt, das im Artikel nicht erwähnt wird, lassen Sie es mich in den Kommentaren unten wissen. ;-);