Advertisement
  1. Code
  2. Android SDK

Widget für Android codieren: Eingabe und Anzeige

by
Read Time:23 minsLanguages:

German (Deutsch) translation by Valentina (you can also view the original English article)

Seit Android 1.5 ermöglichen Anwendungs-Widgets Benutzern, Informationen abzurufen, Apps zu steuern und wichtige Aufgaben auszuführen – alles bequem von ihrem Homescreen aus.

In dieser zweiteiligen Serie zeige ich Ihnen, wie Sie eine bessere Benutzererfahrung bieten, indem Sie Ihren Android-Projekten ein Anwendungs-Widget hinzufügen.

Am Ende der Serie haben Sie ein Widget erstellt, das:

  • mehrere Datensätze anzeigt.
  • eine eindeutige Aktion ausführt, wenn der Benutzer mit einer bestimmten View im Layout dieses Widgets interagiert.
  • automatisch aktualisiert, wenn ein festgelegter Zeitraum verstrichen ist.
  • als Reaktion auf Benutzerinteraktionen mit neuen Daten aktualisiert wird.

In diesem ersten Beitrag verwenden wir die integrierten Tools von Android Studio, um schnell und einfach alle Dateien zu generieren, die für die Bereitstellung eines Android-Anwendungs-Widgets erforderlich sind. Wir erweitern diese Grundlage dann, um ein Widget zu erstellen, das Daten abruft und anzeigt und auf onClick-Ereignisse reagiert.

Was sind Anwendungs-Widgets?

Ein Anwendungs-Widget ist eine leichte Miniatur-App, die normalerweise in eine der folgenden Kategorien fällt:

  • Informations-Widget. Ein nicht scrollbares Widget, das wichtige Informationen anzeigt, z. B. ein Wetter- oder Uhr-Widget.
  • Sammlungs-Widgets. Ein scrollbares Widget, das eine Reihe verwandter Elemente anzeigt, z. B. eine Galerie mit Fotos oder Artikeln aus derselben Publikation. Sammlungswidgets werden normalerweise von einer Datenquelle wie einem Array oder einer Datenbank unterstützt. Ein Sammlungswidget muss entweder eine ListView, GridView, StackView oder einen AdapterViewFlipper enthalten.
  • Steuer-Widgets. Ein Widget, das als Fernbedienung für Ihre Anwendung fungiert und es dem Benutzer ermöglicht, häufig verwendete Funktionen auszulösen, ohne Ihre Anwendung unbedingt starten zu müssen. Anwendungen, die Musik abspielen, bieten oft ein Widget, mit dem der Benutzer Titel direkt von seinem Startbildschirm aus abspielen, anhalten und überspringen kann.
  • Hybrid-Widgets. Warum sich auf eine Kategorie beschränken, wenn Sie Elemente aus mehreren Kategorien auswählen können? Beachten Sie jedoch, dass das Mischen und Abgleichen zu einer verwirrenden Benutzererfahrung führen kann. Um die besten Ergebnisse zu erzielen, sollten Sie Ihr Widget daher unter Berücksichtigung einer einzelnen Kategorie entwerfen und dann nach Bedarf Elemente aus anderen Kategorien hinzufügen. Wenn Sie beispielsweise ein Widget erstellen möchten, das die heutige Wettervorhersage anzeigt, aber auch Benutzern ermöglicht, die Vorhersage für verschiedene Tage und Orte anzuzeigen, dann sollten Sie ein Informations-Widget erstellen und anschließend die erforderlichen Steuerelemente hinzufügen.

Zusätzlich zu den oben genannten Funktionen reagieren die meisten Widgets auf onClick-Ereignisse, indem sie ihre zugehörige Anwendung starten, ähnlich einer Anwendungsverknüpfung, aber sie können auch direkten Zugriff auf bestimmte Inhalte innerhalb dieser Anwendung ermöglichen.

Anwendungs-Widgets müssen in einem App-Widget-Host platziert werden, am häufigsten auf dem Standard-Android-Startbildschirm, obwohl es einige App-Widget-Hosts von Drittanbietern wie den beliebten Nova Launcher und Apex Launcher gibt.

In dieser Serie werde ich über Widgets als etwas sprechen, das Sie auf dem Homescreen platzieren, aber wenn Sie eine vage Erinnerung daran haben, Widgets auf dem Lockscreen platzieren zu können, dann war dies nicht nur ein wunderbarer Traum! Zwischen API-Level 17 und 20 war es möglich, Widgets auf dem Homescreen oder dem Lockscreen zu platzieren.

Da Lockscreen-Widgets in API-Level 21 veraltet waren, erstellen wir in dieser Serie nur ein Widget für den Homescreen.

Warum sollte ich ein Anwendungs-Widget erstellen?

Es gibt mehrere Gründe, warum Sie in Betracht ziehen sollten, Ihrem neuesten Android-Projekt ein Anwendungs-Widget hinzuzufügen.

Einfacher Zugriff auf wichtige Informationen und Funktionen

Widgets ermöglichen es dem Benutzer, die wichtigsten Informationen Ihrer App direkt vom Startbildschirm aus anzuzeigen. Wenn Sie beispielsweise eine Kalender-App entwickelt haben, können Sie ein Widget erstellen, das Details zum nächsten Termin des Benutzers anzeigt. Dies ist weitaus bequemer, als den Benutzer zu zwingen, Ihre App zu starten und möglicherweise auf mehreren Bildschirmen zu navigieren, nur um dieselben Informationen abzurufen.

Wenn Sie ein Kontroll-Widget (oder ein Hybrid-Widget mit Kontrollelementen) entwickeln, kann der Benutzer auch Aufgaben direkt von seinem Homescreen aus erledigen. In Fortsetzung unseres Kalenderbeispiels könnte Ihr Widget es dem Benutzer ermöglichen, Termine zu erstellen, zu bearbeiten und zu stornieren, möglicherweise ohne Ihre App starten zu müssen. Dies hat das Potenzial, mehrere Navigationsschritte von einigen der wichtigsten Aufgaben Ihrer App zu entfernen, was sich nur positiv auf die Benutzererfahrung auswirken kann!

Direkter Zugriff auf alle wichtigen Bildschirme Ihrer App

Durch Tippen auf ein Widget gelangt der Benutzer normalerweise auf die oberste Ebene der zugehörigen Anwendung, ähnlich wie bei einer Anwendungsverknüpfung. Im Gegensatz zu App-Verknüpfungen können Widgets jedoch mit bestimmten Bereichen innerhalb der zugehörigen Anwendung verlinken. Wenn Sie beispielsweise auf die Benachrichtigung Neue E-Mail erhalten eines Widgets tippen, kann die Anwendung mit der bereits ausgewählten neuen Nachricht gestartet werden, während Sie durch Tippen auf Neue E-Mail erstellen direkt zur Aktivität ComposeEmail Ihrer App gelangen.

Indem Sie mehrere Links in das Layout Ihres Widgets einbetten, können Sie bequem mit einem Fingertipp auf alle wichtigen Aktivitäten Ihrer App zugreifen.

Schaffen Sie eine loyale, engagierte Benutzerbasis

Wie die gesamte Pokemon Go-Explosion und der anschließende Drop-off bewiesen haben, garantiert das Herunterladen einer Menge Leute nicht automatisch eine treue Benutzerbasis, die Ihre App noch Tage, Wochen oder sogar Monate auf der ganzen Linie nutzt.

Mobile Benutzer sind ein ziemlich launischer Haufen, und da der auf Ihrem typischen Android-Smartphone oder -Tablet verfügbare Speicher ständig zunimmt, ist es leicht, den Überblick über die Apps zu verlieren, die Sie auf Ihrem Gerät installiert haben. Wenn Sie jetzt Ihr Android-Smartphone oder -Tablet zur Hand nehmen und durch die App-Schublade wischen, werden Sie wahrscheinlich mindestens eine Anwendung entdecken, die Sie völlig vergessen haben.

Indem Sie ein Widget erstellen, das alle wertvollsten Informationen und Funktionen Ihrer App anzeigt, stellen Sie sicher, dass der Benutzer bei jedem Blick auf seinen Startbildschirm nicht nur daran erinnert wird, dass Ihre App existiert, sondern auch, dass sie einige großartige Inhalte enthält.

Hinzufügen eines App-Widget zu Ihrem Projekt

Selbst das einfachste Widget erfordert mehrere Klassen und Ressourcen, aber wenn Sie ein Widget mit den integrierten Tools von Android Studio erstellen, werden alle diese Dateien für Sie generiert. Da es keinen Sinn macht, die Android-Entwicklung schwieriger als nötig zu gestalten, verwenden wir diese Tools, um einen Vorsprung beim Erstellen unseres Widgets zu erzielen.

Ein Anwendungs-Widget muss immer an eine zugrunde liegende App gebunden sein, also erstellen Sie ein neues Android-Projekt mit den Einstellungen Ihrer Wahl.

Nachdem Android Studio Ihr Projekt erstellt hat, wählen Sie Datei > Neu > Widget > AppWidget aus der Android Studio-Symbolleiste. Dadurch wird ein Menü „Komponente konfigurieren“ gestartet, in dem Sie einige der Anfangseinstellungen Ihres Widgets definieren können.

Configure your widgets settings in Android StudioConfigure your widgets settings in Android StudioConfigure your widgets settings in Android Studio

Die meisten dieser Optionen sind ziemlich selbsterklärend, aber es gibt einige, die es wert sind, genauer untersucht zu werden.

Veränderbar (API 12+)

Wenn die Größe eines Widgets veränderbar ist, kann der Benutzer die Anzahl der „Zellen“, die es auf seinem Startbildschirm einnimmt, erhöhen oder verringern, indem er lange auf das Widget drückt und dann die blauen Ziehpunkte um seinen Umriss zieht.

Wenn möglich, sollten Sie Ihrem Widget die Möglichkeit geben, die Größe horizontal und vertikal zu ändern, da dies Ihrem Widget hilft, sich an eine Reihe von Bildschirmkonfigurationen und Startbildschirmeinstellungen anzupassen. Wenn ein Benutzer einen stark überladenen Startbildschirm hat, kann es sein, dass Ihr Widget überhaupt nicht auf diesen Startbildschirm passt, es sei denn, Ihr Widget kann in der Größe geändert werden.

Wenn Sie ein nicht größenveränderbares Widget erstellen möchten, öffnen Sie das Dropdown-Menü Größenveränderbar und wählen Sie entweder Nur horizontal, Nur vertikal oder Nicht größenveränderbar.

Mindestbreite und -höhe

Die Mindestbreite und -höhe gibt die Anzahl der Zellen an, die Ihr Widget anfänglich belegt, wenn es auf dem Startbildschirm platziert wird.

Bei Widgets mit veränderbarer Größe ist dies die kleinste Größe, die der Benutzer für Ihr Widget verwenden kann. Sie können diese Werte also verwenden, um zu verhindern, dass Benutzer Ihr Widget so weit verkleinern, dass es unbrauchbar wird.

Wenn die Größe Ihres Widgets nicht geändert werden kann, sind die Mindestwerte für Breite und Höhe die permanente Breite und Höhe Ihres Widgets.

Um die Chancen eines Widgets zu erhöhen, bequem auf eine Reihe von Startbildschirmen zu passen, wird empfohlen, für die minimalen Werte für Breite und Höhe niemals etwas zu verwenden, das größer als 4 x 4 ist.

Während die genaue Breite und Höhe einer Startbildschirm-"Zelle" von Gerät zu Gerät variiert, können Sie anhand der folgenden Formel eine grobe Schätzung erhalten, wie viele DPIs (Punkte pro Zoll) Ihr Widget belegt:

Wenn Ihr Widget beispielsweise 2 x 3 Zellen umfasst:

Dieses Widget belegt etwa 110 x 180 DPIs auf dem Homescreen des Benutzers. Wenn diese Werte nicht mit den Abmessungen der Zellen eines bestimmten Geräts übereinstimmen, rundet Android Ihr Widget automatisch auf die nächste Zellengröße.

Überprüfen Sie alle Optionen in diesem Menü und nehmen Sie die gewünschten Änderungen vor (ich bleibe bei den Standardeinstellungen) und klicken Sie dann auf Fertig stellen.

Android Studio generiert jetzt alle Dateien und Ressourcen, die für die Bereitstellung eines grundlegenden Anwendungs-Widgets erforderlich sind. Dieses Widget ist nicht gerade aufregend (es ist im Grunde nur ein blauer Block mit dem Wort Beispiel darüber geschrieben), aber es ist ein funktionales Widget, das Sie auf Ihrem Gerät testen können.

So testen Sie das Widget:

  • Installieren Sie Ihr Projekt auf einem physischen Android-Gerät oder AVD (Android Virtual Device).
  • Starten Sie die Widget-Auswahl von Android, indem Sie auf eine leere Stelle auf dem Startbildschirm drücken und dann auf das Wort Widget tippen, das unten auf dem Bildschirm angezeigt wird.
  • Wischen Sie durch die Widget-Auswahl, bis Sie das blaue Beispiel-Widget sehen.
  • Drücken Sie auf dieses Widget, um es auf Ihrem Homescreen abzulegen.
  • Rufen Sie den Größenänderung-Modus auf, indem Sie auf das Widget drücken, bis ein Satz blauer Griffe angezeigt wird, und ziehen Sie dann diese Griffe, um die Anzahl der Zellen, die dieses Widget einnimmt, zu erhöhen oder zu verringern.
Test your widget on an Android Virtual DeviceTest your widget on an Android Virtual DeviceTest your widget on an Android Virtual Device

Untersuchen der Anwendungs-Widget-Dateien

Dieses Widget macht vielleicht nicht allzu viel, aber es enthält alle Klassen und Ressourcen, an denen wir im Rest dieser Serie arbeiten werden. Schauen wir uns also diese Dateien und ihre Rolle bei der Bereitstellung eines Anwendungs-Widgets an.

NewAppWidget.java

Der Widget-Anbieter ist eine praktische Klasse, die die Methoden enthält, die verwendet werden, um programmgesteuert über Broadcast-Ereignisse mit einem Widget zu kommunizieren. Unter der Haube ist ein Widget im Wesentlichen nur ein BroadcastReceiver, der auf verschiedene Aktionen reagieren kann, z. B. wenn der Benutzer eine neue Widget-Instanz auf seinem Homescreen platziert.

Vor allem definieren Sie beim App-Widget-Anbieter die Lebenszyklusmethoden Ihres Widgets, die entweder für jede Instanz des Widgets oder nur für bestimmte Instanzen aufgerufen werden.

Obwohl wir uns ein Widget als eine einzelne Einheit vorstellen, die der Benutzer einmal auf seinem Homescreen platziert, hindert ihn nichts daran, mehrere Instanzen desselben Widgets zu erstellen. Vielleicht ist Ihr Widget so anpassbar, dass verschiedene Instanzen deutlich unterschiedliche Funktionen haben können, oder der Benutzer liebt Ihr Widget einfach so sehr, dass er es auf seinem gesamten Homescreen verteilen möchte!

Werfen wir einen Blick auf die verschiedenen Lebenszyklusmethoden, die Sie in der Widget-Provider-Klasse implementieren können:

Das onReceive-Event

Android ruft die onReceive()-Methode auf dem registrierten BroadcastReceiver auf, wenn das angegebene Ereignis eintritt.

Normalerweise müssen Sie diese Methode nicht manuell implementieren, da die AppWidgetProvider-Klasse automatisch alle Widget-Broadcasts filtert und Vorgänge an die entsprechenden Methoden delegiert.

Das onEnabled-Event

Die Lebenszyklusmethode onEnabled() wird als Reaktion auf ACTION_APPWIDGET_ENABLED aufgerufen, das gesendet wird, wenn der Benutzer die erste Instanz Ihres Widgets zu seinem Startbildschirm hinzufügt. Wenn der Benutzer zwei Instanzen Ihres Widgets erstellt, wird onEnabled() für die erste Instanz aufgerufen, aber nicht für die zweite.

In dieser Lebenszyklus-Methode führen Sie alle Einstellungen durch, die nur einmal für alle Widget-Instanzen auftreten müssen, wie z. B. das Erstellen einer Datenbank oder das Einrichten eines Dienstes.

Beachten Sie, dass, wenn der Benutzer alle Instanzen Ihres Widgets von seinem Gerät löscht und dann eine neue Instanz erstellt, diese als erste Instanz eingestuft wird und folglich die onEnabled()-Methode erneut aufgerufen wird.

Das onAppWidgetOptionsChanged-Ereignis

Diese Lebenszyklusmethode wird als Reaktion auf ACTION_APPWIDGET_OPTIONS_CHANGED aufgerufen, die gesendet wird, wenn eine Widget-Instanz erstellt wird und jedes Mal, wenn die Größe des Widgets geändert wird. Sie können diese Methode verwenden, um Inhalte basierend auf der Größe Ihres Widgets durch den Benutzer anzuzeigen oder auszublenden, obwohl dieser Rückruf nur in Android 4.1 und höher unterstützt wird.

Das onUpdate-Event

Die Lebenszyklusmethode onUpdate() wird jedes Mal aufgerufen:

  • Das Aktualisierungsintervall ist abgelaufen.
  • Der Benutzer führt eine Aktion aus, die die Methode onUpdate() auslöst.
  • Der Benutzer platziert eine neue Instanz des Widgets auf seinem Startbildschirm (es sei denn, Ihr Widget enthält eine Konfigurationsaktivität, die wir in Teil 2 behandeln werden).

Die Lebenszyklusmethode onUpdate() wird auch als Reaktion auf ACTION_APPWIDGET_RESTORED aufgerufen, das immer dann gesendet wird, wenn ein Widget aus einer Sicherung wiederhergestellt wird.

Bei den meisten Projekten enthält die Methode onUpdate() den Großteil des Widget-Anbietercodes, zumal Sie dort auch die Ereignishandler Ihres Widgets registrieren.

Das onDeleted-Event

Die Methode onDeleted() wird jedes Mal aufgerufen, wenn eine Instanz Ihres Widgets vom App-Widget-Host gelöscht wird, was den ACTION_APPWIDGET_DELETED-Broadcast des Systems auslöst.

Das onDisabled-Event

Diese Methode wird als Reaktion auf den ACTION_APPWIDGET_DISABLED-Broadcast aufgerufen, der gesendet wird, wenn die letzte Instanz Ihres Widgets vom App-Widget-Host entfernt wird. Wenn der Benutzer beispielsweise drei Instanzen Ihres Widgets erstellt hat, wird die Methode onDisabled() nur aufgerufen, wenn der Benutzer die dritte und letzte Instanz von seinem Startbildschirm entfernt.

In der Lebenszyklusmethode onDisabled() sollten Sie alle Ressourcen bereinigen, die Sie in onEnabled() erstellt haben. Wenn Sie also eine Datenbank in onEnabled() einrichten, löschen Sie sie in onDisabled().

Das onRestored-Event

Die Methode onRestored() wird als Reaktion auf ACTION_APPWIDGET_RESTORED aufgerufen, das immer dann gesendet wird, wenn eine Instanz eines Anwendungswidgets aus einer Sicherung wiederhergestellt wird. Wenn Sie persistente Daten verwalten möchten, müssen Sie diese Methode überschreiben und die vorherigen AppWidgetIds den neuen Werten zuordnen, zum Beispiel:

Wenn Sie die von Android Studio automatisch generierte Datei NewAppWidget.java öffnen, sehen Sie, dass sie bereits Implementierungen für einige dieser Widget-Lebenszyklusmethoden enthält:

Die Widget-Layout-Datei

Die Datei res/layout/new_app_widget.xml definiert das Layout unseres Widgets, das derzeit nur ein blauer Hintergrund ist, auf dem das Wort Beispiel steht.

Der Hauptunterschied zwischen dem Erstellen eines Layouts für eine Aktivität und dem Erstellen eines Layouts für ein Widget besteht darin, dass Widget-Layouts auf RemoteViews basieren müssen, da dies Android ermöglicht, das Layout in einem Prozess außerhalb Ihrer Anwendung anzuzeigen (d. h. auf dem Homescreen des Benutzers).

RemoteViews unterstützen nicht jede Art von Layout oder View, daher sind Sie beim Erstellen eines Widget-Layouts auf die folgenden Typen beschränkt:

  • AnalogClock
  • Button
  • Chromometer
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • LinearLayout
  • ProgressBar
  • RelativeLayout
  • TextView
  • ViewStub

Wenn Sie ein Sammlungs-Widget erstellen, können Sie auch die folgenden Typen verwenden, wenn Ihre Anwendung auf Android 3.0 und höher installiert ist:

  • AdapterViewFlipper
  • GridView
  • ListView
  • StackView
  • ViewFlipper

Unterklassen und Nachkommen der obigen Views und Klassen werden nicht unterstützt.

Klicks und Wischbewegungen

Um sicherzustellen, dass Benutzer nicht versehentlich mit einem Widget interagieren, während sie auf ihrem Homescreen navigieren, reagieren Widgets nur auf onClick-Ereignisse.

Die Ausnahme ist, wenn der Benutzer ein Widget entfernt, indem er es zur Deinstallation-Aktion seines Startbildschirms zieht, da Ihr Widget in dieser Situation auf die vertikale Wischgeste reagiert. Da diese Interaktion jedoch vom Android-System verwaltet wird, müssen Sie sich nicht um die Implementierung vertikaler Wischunterstützung in Ihrer Anwendung kümmern.

Die Widget-Infodatei

Die Datei res/xml/new_app_widget_info.xml (auch bekannt als AppWidgetProviderInfo-Datei) definiert eine Reihe von Widget-Eigenschaften, einschließlich vieler der Einstellungen, die Sie im Menü Komponente konfigurieren von Android Studio ausgewählt haben, z. B. die Mindestabmessungen Ihres Widgets und ob es platziert werden kann auf dem Sperrbildschirm.

Die Konfigurationsdatei gibt auch an, wie oft Ihr Widget neue Informationen vom App-Widget-Aktualisierungsdienst anfordert. Wenn Sie sich für diese Häufigkeit entscheiden, müssen Sie eine knifflige Balance finden: Längere Aktualisierungsintervalle helfen, den Akku des Geräts zu schonen, aber legen Sie Ihre Intervalle zu weit auseinander und Ihr Widget zeigt möglicherweise merklich veraltete Informationen an.

Sie sollten sich auch bewusst sein, dass das System ein schlafendes Gerät aufweckt, um neue Informationen abzurufen. Obwohl die Aktualisierung Ihres Widgets einmal alle halbe Stunde nicht übertrieben klingen mag, kann dies dazu führen, dass Ihr Widget das Gerät einmal alle 30 Minuten aufweckt wird sich auf den Batterieverbrauch auswirken.

Wenn Sie die Datei new_app_widget_info.xml Ihres Projekts öffnen, sehen Sie, dass sie bereits eine Reihe von Widget-Eigenschaften definiert, einschließlich des Aktualisierungsintervalls.

Wenn Sie Ihren Benutzern die Möglichkeit geben, Ihr Widget auf dem Sperrbildschirm zu platzieren, denken Sie daran, dass der Inhalt des Widgets für jeden sichtbar ist, der auch nur auf den Sperrbildschirm blickt. Wenn Ihr „Standard“-Layout persönliche oder potenziell sensible Informationen enthält, sollten Sie ein alternatives Layout für Ihr Widget bereitstellen, das Sie verwenden können, wenn es auf dem Sperrbildschirm platziert wird.

Die Datei res/values/dimens.xml

Widgets sehen nicht optimal aus, wenn sie aneinander gedrückt werden oder bis zum Rand des Homescreens reichen.

Immer wenn Ihr Widget auf Android 4.0 oder höher angezeigt wird, fügt das Android-Betriebssystem automatisch etwas Abstand zwischen dem Widget-Rahmen und dem Begrenzungsrahmen ein.

A widget consists of a bounding box frame widget margins widget padding and widget controlsA widget consists of a bounding box frame widget margins widget padding and widget controlsA widget consists of a bounding box frame widget margins widget padding and widget controls

Wenn Ihre App auf einem Gerät landet, auf dem früher als Android 4.0 ausgeführt wird, muss Ihr Widget diese Auffüllung selbst bereitstellen.

Wenn Sie ein Widget über das Menü Datei > Neu > Widget > AppWidget erstellen, generiert Android Studio zwei dimens.xml-Dateien, die garantieren, dass Ihr Widget unabhängig von der Android-Version, auf der es installiert ist, immer die richtige Auffüllung hat.

Sie finden diese beiden Dateien im res-Ordner Ihres Projekts:

res/values/dimens.xml

Diese Datei definiert die 8-dpi-Auffüllung, die Ihr Widget bereitstellen muss, wenn es auf API-Level 13 oder früher installiert wird.

res/values-v14/dimens.xml

Da Android 4.0 und höher automatisch Padding auf jedes Widget anwendet, wird jedes Padding, das Ihr Widget bereitstellt, zusätzlich zu diesem Standardpadding verwendet.

Um sicherzustellen, dass Ihr Widget mit allen App-Symbolen oder anderen Widgets übereinstimmt, die der Benutzer auf seinem Startbildschirm platziert hat, gibt diese Datei dimens.xml an, dass Ihr Widget für Android 4.0 und höher keine zusätzlichen Ränder bereitstellen sollte:

Dieser Standardrand hilft dabei, den Startbildschirm visuell auszugleichen, daher sollten Sie es vermeiden, ihn zu ändern – schließlich möchten Sie nicht, dass Ihr Widget das Seltsame ist!

Das Layout Ihres Widgets verweist bereits auf diesen Dimensionswert (android:padding="@dimen/widget_margin"). Achten Sie also darauf, diese Zeile nicht zu ändern, während Sie am Layout Ihres Widgets arbeiten.

Obwohl diese dimens.xml-Dateien der einfachste Weg sind, um sicherzustellen, dass Ihr Widget immer die richtige Auffüllung hat, besteht eine Alternative darin, mehrere Hintergründe mit neun Patches mit unterschiedlichen Rändern für API-Level 14 zu erstellen, wenn diese Technik für Ihr spezielles Projekt nicht geeignet ist und höher und API-Level 13 und niedriger. Sie können neun Patches mit dem Draw 9-Patch-Tool von Android Studio oder mit einem speziellen Grafikbearbeitungsprogramm wie Adobe Photoshop erstellen.

Das Projekt-Manifest

In der AndroidManifest.xml-Datei Ihres Projekts müssen Sie Ihr Widget als BroadcastReceiver registrieren und den Widget-Anbieter und die AppWidgetProviderInfo-Datei angeben, die dieses Widget verwenden soll.

Wenn Sie das Manifest öffnen, sehen Sie, dass Android Studio all diese Informationen bereits für Sie hinzugefügt hat.

Widget-Auswahl-Ressource

Die Datei res/drawable/example_appwidget_preview.png ist die drawable-Ressource, die Ihr Widget in der Widget-Auswahl darstellt.

Um Benutzer zu ermutigen, Ihr Widget aus allen verfügbaren Optionen auszuwählen, sollte dieses Drawable Ihr Widget anzeigen, richtig konfiguriert auf einem Homescreen und mit vielen nützlichen Inhalten.

Wenn Sie ein Widget über das Menü Datei > Neu > Widget > AppWidget erstellen, generiert Android Studio automatisch eine zeichenbare Vorschau (example_appwidget_preview.png).

Im zweiten Teil zeige ich Ihnen, wie Sie dieses Stock Drawable schnell und einfach ersetzen können, indem Sie die integrierten Tools von Android Studio verwenden, um Ihr eigenes Vorschaubild zu generieren.

Erstellen Sie Ihr Layout

Jetzt haben wir einen Überblick darüber, wie diese Dateien zusammenkommen, um ein Anwendungs-Widget zu erstellen. Lassen Sie uns diese Grundlage erweitern und ein Widget erstellen, das mehr kann, als nur das Wort Beispiel auf blauem Hintergrund anzuzeigen!

Wir werden unserem Widget die folgende Funktionalität hinzufügen:

  • Eine TextView, die ein Anwendungs-Widget-ID-Label anzeigt.
  • Eine TextView, die die ID für diese bestimmte Widgetinstanz abruft und anzeigt.
  • Eine TextView, die auf onClick-Ereignisse reagiert, indem sie den Standardbrowser des Benutzers startet und eine URL lädt.

Wir könnten zwar einfach drei TextViews aus der Android Studio-Palette ziehen und auf der Leinwand ablegen, aber wenn Ihr Widget gut aussieht, werden die Benutzer es eher auf ihrem Homescreen platzieren. Erstellen wir also einige Ressourcen, die unserem Widget zusätzliche visuelle Eigenschaften verleihen Beschwerde.

Hintergrund des Widgets erstellenWidget

Ich werde ein Rechteck mit abgerundeten Ecken, einem Hintergrund mit Farbverlauf und einem Rahmen erstellen, den ich als Hintergrund für mein Widget verwende:

  • Klicken Sie bei gedrückter Ctrl-Taste auf den drawable-Ordner Ihres Projekts und wählen Sie Neu > Drawable Resource-Datei.
  • Benennen Sie diese Datei als widget_background und klicken Sie auf OK.
  • Geben Sie den folgenden Code ein:

2. Erstellen Sie den TextView-Hintergrund

Erstellen Sie als Nächstes eine Form, die als Hintergrund für unsere TextViews verwendet wird:

  • Klicken Sie bei gedrückter Ctrl-Taste auf den drawable-Ordner Ihres Projekts und wählen Sie Neu > Drawable-Ressourcendatei.
  • Benennen Sie diese Datei tvbackground und klicken Sie dann auf OK.
  • Geben Sie den folgenden Code ein:

3. Erstellen Sie einige Stile

Ich werde auch die folgenden Stile verwenden:

  • widget_text. Ein fetter Effekt, den ich auf den Text des Widgets anwende.
  • widget_views. Die verschiedenen Ränder und Auffüllungen, die ich auf meine TextViews anwenden werde.

Öffnen Sie die Datei style.xml Ihres Projekts und fügen Sie Folgendes hinzu:

4. Erstellen Sie Ihr Layout!

Nachdem nun alle unsere Ressourcen vorhanden sind, können wir das Layout unseres Widgets erstellen. Öffnen Sie die Datei new_app_widget.xml und fügen Sie Folgendes hinzu:

Öffnen Sie abschließend die Datei strings.xml und definieren Sie die String-Ressourcen, auf die wir in unserem Layout verwiesen haben:

Die Registerkarte Design von Android Studio hilft Ihnen, effizienter zu arbeiten, indem Sie eine Vorschau anzeigen, wie Ihr Layout auf einer Reihe von Geräten gerendert wird. Der Wechsel zur Registerkarte Design ist viel einfacher, als jedes Mal, wenn Sie Ihr Layout ändern, Ihr Projekt auf einem Android-Gerät auszuführen.

Frustrierenderweise bietet Android Studio keine dedizierte Widget-Skin, daher wird das Layout Ihres Widgets standardmäßig wie eine normale Aktivität gerendert, was nicht den besten Einblick bietet, wie Ihr Widget auf dem Startbildschirm des Benutzers aussehen wird.

Eine mögliche Problemumgehung besteht darin, Ihr Layout mit der Android Wear (Square)-Skin zu rendern, die mit der Größe und Form eines Android-Anwendungs-Widgets vergleichbar ist:

  • Stellen Sie sicher, dass die Registerkarte Gerät von Android Studio ausgewählt ist.
  • Öffnen Sie das Dropdown-Menü Gerät.
  • Wählen Sie 280 x 280, hdpi (Quadrat) aus dem Dropdown-Menü.
Try rendering your widget layout using the Android Wear Square skinTry rendering your widget layout using the Android Wear Square skinTry rendering your widget layout using the Android Wear Square skin

Erstellen Sie die Widget-Funktionalität

Jetzt, da unser Widget so aussieht, ist es an der Zeit, ihm einige Funktionen zu geben:

  • Daten abrufen und anzeigen. Jeder Instanz eines Widgets wird beim Hinzufügen zum App-Widget-Host eine ID zugewiesen. Diese ID bleibt über den gesamten Lebenszyklus des Widgets bestehen und ist für diese Widget-Instanz vollständig eindeutig, selbst wenn der Benutzer seinem Startbildschirm mehrere Instanzen desselben Widgets hinzufügt.
  • Fügen Sie eine Aktion hinzu. Wir erstellen einen OnClickListener, der den Standardbrowser des Benutzers startet und eine URL lädt.

Öffnen Sie die Widget-Anbieterdatei (NewAppWidget.java) und löschen Sie die Zeile, die die Zeichenfolgenressource appwidget_text abruft:

Im updateAppWidget-Block müssen wir nun den Platzhalter R.id.id_value mit der eindeutigen ID des Widgets aktualisieren:

Wir müssen auch ein Intent-Objekt erstellen, das die URL enthält, die geladen werden soll, wenn der Benutzer mit dieser TextView interagiert.

Hier ist die vollständige Widget-Anbieterdatei:

Testen des Widgets

Es ist Zeit, dieses Widget auf die Probe zu stellen!

  • Installieren Sie das aktualisierte Projekt auf Ihrem Android-Gerät.
  • Um sicherzustellen, dass Sie die neueste Version dieses Widgets sehen, entfernen Sie alle vorhandenen Widget-Instanzen von Ihrem Startbildschirm.
  • Drücken Sie auf einen beliebigen leeren Bereich des Startbildschirms und wählen Sie dann Ihr Widget aus der Widget-Auswahl aus.
  • Positionieren und skalieren Sie das Widget wie gewünscht.
Put your Android application widget to the testPut your Android application widget to the testPut your Android application widget to the test
  • Überprüfen Sie, ob das Widget auf Benutzereingabeereignisse reagiert, indem Sie Tippen Sie zum Starten von URL TextView auswählen. Das Anwendungs-Widget sollte reagieren, indem es Ihren Standardbrowser startet und eine URL lädt.

Wenn Sie diesem Tutorial gefolgt sind, haben Sie an dieser Stelle ein voll funktionsfähiges Widget, das viele der Kernkonzepte von Android-Anwendungs-Widgets demonstriert. Sie können das fertige Projekt auch von unserem GitHub-Repository herunterladen.

Abschluss

In diesem Beitrag haben wir alle Dateien untersucht, die für die Bereitstellung eines Android-Anwendungs-Widgets erforderlich sind, bevor wir ein Widget erstellt haben, das einige eindeutige Daten abruft und anzeigt und auf Benutzereingabeereignisse reagiert.

Derzeit fehlt unserem Widget noch eine wichtige Funktion: Es zeigt keine neuen Informationen an! Im nächsten Beitrag geben wir diesem Widget die Möglichkeit, neue Daten basierend auf einem festgelegten Zeitplan und als direkte Reaktion auf Benutzereingabeereignisse automatisch abzurufen und anzuzeigen.

Sehen Sie sich in der Zwischenzeit einige unserer anderen großartigen Beiträge zur Android-App-Entwicklung hier auf Envato Tuts+ an!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.