Unterstützung für verbundene Displays

Mit verbundenen Displays können Nutzer die Desktopfensterfunktion auch auf Standard-Smartphones nutzen und von ihren Mobilgeräten aus auf große Bildschirme zugreifen. Diese Funktion eröffnet neue Möglichkeiten für die App-Interaktion und die Nutzerproduktivität.

Alle Funktionen für Desktopfenster gelten auch für angeschlossene Bildschirme. Wenn Sie ein Smartphone mit einem Display verbinden, bleibt der Status des Smartphones unverändert und auf dem verbundenen Display wird eine leere Desktopsitzung gestartet. Das Gerät und das Display agieren als zwei separate Systeme mit Apps, die für jedes Display spezifisch sind.

Abbildung 1. Smartphone mit einem externen Display verbunden, auf dem eine Desktopsitzung angezeigt wird, während das Smartphone seinen eigenen Status beibehält

Wenn Sie ein Gerät mit Desktop-Freiform-Fenster, z. B. ein Tablet, an einen externen Monitor anschließen, wird die Desktopsitzung auf beide Displays ausgedehnt. Die beiden Displays funktionieren dann als ein zusammenhängendes System. Bei dieser Konfiguration können Fenster, Inhalte und der Cursor frei zwischen den beiden Displays bewegt werden.

Abbildung 2 Tablet, das an einen externen Monitor angeschlossen ist, wodurch die Desktopsitzung auf beide Displays erweitert wird

Wenn Sie verbundene Displays effektiv unterstützen möchten, müssen Sie mehrere Aspekte des Designs und der Implementierung Ihrer App berücksichtigen. Die folgenden Best Practices sorgen für eine reibungslose und produktive Nutzererfahrung.

Änderungen an dynamischen Displayanzeigen verarbeiten

Viele Apps werden unter der Annahme entwickelt, dass sich das Display-Objekt und seine Eigenschaften während des App-Lebenszyklus nicht ändern. Wenn ein Nutzer jedoch einen externen Monitor anschließt oder trennt oder sogar ein App-Fenster zwischen Displays verschiebt, kann sich das zugrunde liegende Display-Objekt ändern, das mit dem Kontext oder Fenster Ihrer App verknüpft ist. Die Eigenschaften des Displays wie Größe, Auflösung, Bildwiederholrate, HDR-Unterstützung und Dichte können sich unterscheiden. Wenn Sie beispielsweise Werte basierend auf dem Display des Smartphones hartcodieren, funktionieren Ihre Layouts auf einem externen Display wahrscheinlich nicht.

Externe Displays können auch sehr unterschiedliche Pixeldichten haben. Ihre App muss richtig auf Änderungen der Dichte reagieren. Dazu müssen Sie dichteunabhängige Pixel (dp) für Layouts verwenden, dichtespezifische Ressourcen bereitstellen und dafür sorgen, dass Ihre Benutzeroberfläche richtig skaliert wird.

Den richtigen Kontext verwenden

In Umgebungen mit mehreren Bildschirmen ist es entscheidend, den richtigen Kontext zu verwenden. Beim Zugriff auf Ressourcen unterscheidet sich der angezeigte Aktivitätskontext vom nicht angezeigten Anwendungskontext.

Der Aktivitätskontext enthält Informationen zum Display und wird immer an den Displaybereich angepasst, in dem die Aktivität angezeigt wird. So erhalten Sie die richtigen Informationen zur Displaydichte oder zu den Fenstermesswerten Ihrer App. Verwenden Sie immer den Aktivitätskontext (oder einen anderen UI-basierten Kontext), um Informationen zum aktuellen Fenster oder Display zu erhalten. Dies wirkt sich auch auf einige System-APIs aus, die Informationen aus dem Kontext verwenden.

Informationen zum Display abrufen

Mit der Klasse Display können Sie Informationen zu einem bestimmten Display abrufen, z. B. seine Größe oder Flags, die angeben, ob ein Display sicher ist. Verwenden Sie den Systemdienst DisplayManager, um die verfügbaren Displays abzurufen:

val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()

Start und Konfiguration von Aktivitäten verwalten

Bei verbundenen Displays können Apps angeben, auf welchem Display eine App ausgeführt werden soll, wenn sie gestartet oder eine andere Aktivität erstellt wird. Dieses Verhalten hängt vom in der Manifestdatei definierten Aktivitätsstartmodus und von den Intent-Flags und -Optionen ab, die von der Entität festgelegt wurden, die die Aktivität startet.

Wenn eine Aktivität auf ein sekundäres Display verschoben wird, kann es in Ihrer App zu einer Kontextaktualisierung, einer Fenstergrößenänderung sowie zu Konfigurations- und Ressourcenänderungen kommen. Wenn die Aktivität die Konfigurationsänderung verarbeitet, wird sie in onConfigurationChanged() benachrichtigt. Andernfalls wird die Aktivität neu gestartet.

Wenn der ausgewählte Startmodus für eine Aktivität mehrere Instanzen zulässt, kann durch das Starten auf einem sekundären Bildschirm eine neue Instanz der Aktivität erstellt werden. Beide Aktivitäten werden gleichzeitig fortgesetzt, was für bestimmte Multitasking-Szenarien von Vorteil sein kann.

Sie können eine Aktivität auf einem bestimmten Display mit ActivityOptions starten:

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId)
startActivity(intent, options.toBundle())

Gerätezulassungslisten vermeiden

Manchmal wird die Benutzeroberfläche und die Funktionen für große Bildschirme auf ausgewählte Geräte beschränkt, indem eine Zulassungsliste verwendet oder die Größe des integrierten Displays geprüft wird. Bei verbundenen Displays ist dieser Ansatz nicht mehr effektiv, da praktisch jedes neue Gerät mit einem großen Bildschirm verbunden werden kann. Entwerfen Sie Ihre App so, dass sie responsiv ist und sich an verschiedene Bildschirmgrößen und -dichten anpassen lässt.

Unterstützung externer Peripheriegeräte

Wenn Nutzer eine Verbindung zu einem externen Display herstellen, schaffen sie oft eine Desktop-ähnliche Umgebung. Dazu gehören häufig externe Tastaturen, Mäuse, Touchpads, Webcams, Mikrofone und Lautsprecher. Sie müssen dafür sorgen, dass Ihre App nahtlos mit diesen Peripheriegeräten funktioniert. Dazu gehören die Verarbeitung von Tastenkürzeln, die Verwaltung von Mauszeigerinteraktionen, die korrekte Unterstützung externer Kameras oder Mikrofone und die Einhaltung der Audioausgabe-Weiterleitung. Weitere Informationen finden Sie unter Eingabekompatibilität auf großen Bildschirmen.

Produktivität der Nutzer steigern

Vernetzte Displays bieten eine erhebliche Chance, die Produktivität der Nutzer zu verbessern. Sie haben jetzt die Tools, um mobile Apps zu erstellen, die eine Leistung bieten, die mit Desktop-Anwendungen vergleichbar ist. Mit den folgenden Funktionen lässt sich die Produktivität der Nutzer steigern:

  • Nutzern ermöglichen, mehrere Instanzen derselben App zu öffnen. Das ist für Aufgaben wie den Vergleich von Dokumenten, das Verwalten verschiedener Unterhaltungen oder das gleichzeitige Ansehen mehrerer Dateien unerlässlich.
  • Ermöglichen Sie Nutzern, umfangreiche Daten per Drag-and-drop in und aus Ihrer App zu teilen.
  • Hilf Nutzern, ihren Workflow bei Konfigurationsänderungen beizubehalten, indem du ein robustes Statusverwaltungssystem implementierst.

Wenn Sie diese Richtlinien befolgen und die bereitgestellten Codebeispiele verwenden, können Sie Apps erstellen, die sich nahtlos an verbundene Displays anpassen und Nutzern eine umfassendere und produktivere Nutzung ermöglichen.