Erstellen Sie ein Android-Widget für Ihre App

Autor: Lewis Jackson
Erstelldatum: 13 Kann 2021
Aktualisierungsdatum: 1 Juli 2024
Anonim
Erstellen Sie ein Android-Widget für Ihre App - Apps
Erstellen Sie ein Android-Widget für Ihre App - Apps

Inhalt


Seit den Anfängen des Betriebssystems können Benutzer mit Widgets für Android bequem von ihrem Homescreen aus mit ihren Lieblings-Apps interagieren. Wie erstellen Sie ein Android-Widget?

Widgets verleihen Ihrer Anwendung für Entwickler eine wertvolle Präsenz auf dem Homescreen des Benutzers. Anstatt in der App-Schublade nicht sichtbar zu sein, werden Benutzer an Ihre App erinnert jedes Mal Sie blicken auf ihren Homescreen und erhalten gleichzeitig eine Vorschau auf die interessantesten und nützlichsten Inhalte Ihrer App.

Widgets verleihen Ihrer Anwendung eine wertvolle Präsenz auf dem Homescreen des Benutzers

In diesem Artikel zeige ich Ihnen, wie Sie durch die Erstellung eines Android-Widgets eine bessere Benutzererfahrung erzielen und gleichzeitig Benutzer dazu ermutigen, sich auf Ihre App einzulassen. Am Ende dieses Artikels haben Sie ein bildlauffähiges Sammlungswidget erstellt, das einen vollständigen Datensatz auf dem Startbildschirm des Benutzers anzeigt.


Um sicherzustellen, dass Sie die Art von Widget liefern, die Benutzer verwenden wollen Zum Platzieren auf dem Startbildschirm erstellen wir außerdem eine Konfigurationsaktivität, mit der Benutzer den Inhalt, das Erscheinungsbild und die Funktionen des Widgets anpassen können. Abschließend zeige ich, wie Sie die Nutzer zur Verwendung Ihres Widgets ermutigen können, indem Sie ein Widget-Vorschaubild erstellen, das das Beste zeigt, was Ihr Widget zu bieten hat.

Lesen Sie auch: Entwickeln für faltbare Geräte: Was Sie wissen müssen

Was sind Widgets für Android?

Ein Anwendungs-Widget ist eine kompakte Miniaturanwendung, die auf dem Homescreen des Benutzers ausgeführt wird.

Widgets für Android können eine Reihe von Inhalten bereitstellen, fallen jedoch im Allgemeinen in eine der folgenden Kategorien:


  • Informations-Widget. Dies ist ein nicht scrollbares Widget, das einige Informationen anzeigt, z. B. die heutige Wettervorhersage oder das Datum und die Uhrzeit.
  • Sammlungs-Widgets. Dies ist ein bildlauffähiges Widget, das eine Reihe verwandter Daten anzeigt, die als ListView, GridView, StackView oder AdapterViewFlipper formatiert sind. Sammlungswidgets werden normalerweise von einer Datenquelle wie einer Datenbank oder einem Array gesichert.
  • Widgets steuern. Diese Widgets fungieren als Fernbedienung, mit der Benutzer mit Ihrer Anwendung interagieren können. ohne es in den Vordergrund bringen zu müssen. Apps, die Medien wie Podcasts oder Musik wiedergeben, verfügen häufig über Steuerungs-Widgets, mit denen der Benutzer Aktionen zum Abspielen, Anhalten und Überspringen direkt vom Startbildschirm aus auslösen kann.
  • Hybrid Widgets. In einigen Fällen können Sie möglicherweise eine bessere Benutzererfahrung erzielen, indem Sie Elemente aus mehreren Kategorien kombinieren. Wenn Sie beispielsweise ein Steuerungswidget für eine Musikanwendung entwickeln, können Sie die Steuerelemente "Wiedergabe", "Pause" und "Überspringen" bereitstellen. Möglicherweise möchten Sie jedoch auch einige Informationen anzeigen, z. B. den Titel und den Interpreten des Songs. Wenn Sie sich für eine Kombination entscheiden, lassen Sie sich nicht mitreißen! Widgets bieten in der Regel die beste Benutzererfahrung, wenn sie einen einfachen Zugriff auf eine kleine Menge aktueller, relevanter Informationen oder einige häufig verwendete Funktionen ermöglichen. Um das Gewicht Ihrer Hybrid-Widgets zu verringern, wird empfohlen, die Hauptkategorie Ihres Widgets zu identifizieren und gemäß dieser Kategorie zu entwickeln dann Fügen Sie einige Elemente aus der sekundären Kategorie des Widgets hinzu.

Benötigt mein Projekt wirklich ein Anwendungs-Widget?

Es gibt verschiedene Gründe, warum Sie erwägen sollten, Ihrem Android-Projekt ein Anwendungs-Widget hinzuzufügen.

Widgets für Android können die Benutzerfreundlichkeit verbessern

In der Regel ist die Benutzerfreundlichkeit umso besser, je weniger Navigationsschritte zum Ausführen einer Aufgabe erforderlich sind.

Durch die Bereitstellung eines Anwendungs-Widgets können Sie mehrere Navigationsschritte aus den am häufigsten verwendeten Flows Ihrer App entfernen. Im besten Fall erhalten Ihre Benutzer die benötigten Informationen, indem Sie auf ihren Startbildschirm blicken, oder führen die gewünschte Aufgabe durch einfaches Tippen auf eine Schaltfläche in Ihrem Steuerungswidget aus.

Stärker als Anwendungsverknüpfungen

App-Widgets reagieren häufig auf onClick-Ereignisse, indem sie die oberste Ebene in der zugeordneten Anwendung starten, ähnlich einer Anwendungsverknüpfung. Widgets können jedoch auch direkten Zugriff auf bestimmte Aktivitäten in einer Anwendung bieten, z. B. durch Tippen auf die Benachrichtigung "Neu erhalten" eines Widgets wird möglicherweise die zugehörige App mit der neuen bereits geöffneten App gestartet.

Durch das Einbetten mehrerer Links in das Layout Ihres Widgets können Sie mit einem Fingertipp auf alle wichtigen Aktivitäten Ihrer App zugreifen und noch mehr Navigationsschritte aus Ihren am häufigsten verwendeten Abläufen entfernen.

Durch das Einbetten mehrerer Links in das Widget-Layout können Sie mit einem Fingertipp auf alle wichtigen Aktivitäten Ihrer App zugreifen.

Beachten Sie, dass Widgets nur auf onClick-Ereignisse reagieren. Dadurch wird verhindert, dass Benutzer versehentlich mit Ihrem Widget interagieren, während sie über den Startbildschirm wischen. Die einzige Ausnahme besteht darin, dass der Benutzer versucht, Ihr Widget zu löschen, indem er es in Richtung der Aktion "Entfernen" auf dem Startbildschirm zieht. In diesem Szenario reagiert Ihr Widget auf eine vertikale Wischbewegung.

Diese Interaktion wird vom Android-System verwaltet, sodass Sie sich nicht um die manuelle Implementierung der Unterstützung für vertikales Wischen in Ihrem Widget kümmern müssen.

Erstellen Sie ein Android-Widget, um ein langfristiges Engagement zu fördern

Die Leute davon zu überzeugen, Ihre App herunterzuladen, ist nur der erste Schritt, um eine erfolgreiche Android-Anwendung zu erstellen. Wenn Sie sich Ihr eigenes Android-Smartphone oder -Tablet schnappen und durch die App-Schublade wischen, werden Sie wahrscheinlich mehrere Apps entdecken, die Sie in Tagen, Wochen oder möglicherweise sogar Monaten noch nicht verwendet haben.

Lesen Sie auch:Erste Schritte mit dem Facebook für Android SDK

Sobald Ihre App erfolgreich auf dem Gerät des Benutzers installiert wurde, müssen Sie hart arbeiten, um sie zu beschäftigen und Ihre App zu genießen. Wenn Sie Ihrer App eine Präsenz auf dem Homescreen verleihen, kann dies ein leistungsfähiges Instrument sein, um ein langfristiges Engagement zu fördern, da es Sie ständig daran erinnert, dass Ihre Anwendung vorhanden ist!

Ein gut gestaltetes Widget kann auch als fortlaufende Werbung für Ihre App dienen. Jedes Mal, wenn der Benutzer auf seinen Startbildschirm schaut, hat Ihr Widget die Möglichkeit, ihn zu ermutigen, sich erneut mit Ihrer App zu beschäftigen, indem er ihm alle interessanten und nützlichen Inhalte Ihrer App präsentiert.

Erstellen eines Sammlungs-App-Widgets

In diesem Lernprogramm erstellen wir ein Auflistungswidget, das ein Array als scrollbare ListView anzeigt.

Damit Sie den Lebenszyklus des App-Widgets nachverfolgen können, löst dieses Widget beim Durchlaufen der verschiedenen Lebenszykluszustände auch verschiedene Toasts aus. Gegen Ende dieses Tutorials erweitern wir unser Widget mit einem benutzerdefinierten Vorschaubild, das in der Widget-Auswahl von Android angezeigt wird, und einer Konfigurationsaktivität, mit der Benutzer das Widget anpassen können, bevor sie es auf dem Startbildschirm platzieren.

Erstellen Sie ein neues Android-Projekt mit den Einstellungen Ihrer Wahl und legen Sie los!

Erstellen Sie das Layout Ihres Widgets

Zunächst definieren wir die Benutzeroberfläche des Widgets.

Anwendungs-Widgets werden in einem Prozess angezeigt draußen Sie können also nur Layouts und Ansichten verwenden, die von RemoteViews unterstützt werden.

Beim Erstellen Ihres Layouts sind Sie auf Folgendes beschränkt:

  • Analoge Uhr
  • Taste
  • Chronometer
  • FrameLayout
  • Gitterstruktur
  • ImageButton
  • Bildansicht
  • LinearLayout
  • Fortschrittsanzeige
  • RelativeLayout
  • Textvorschau
  • ViewStub
  • AdapterViewFlipper
  • Rasteransicht
  • Listenansicht
  • StackView
  • ViewFlipper

Beachten Sie, dass Unterklassen der oben genannten Klassen und Views sind nicht unterstützt.

Erstellen Sie eine neue Layoutressourcendatei mit dem Namen list_widget.xml. Da wir unsere Daten in einer ListView anzeigen, dient dieses Layout hauptsächlich als Container für eine Element:

Auffüllen des Auflistungswidgets

Als Nächstes müssen wir einen Datenprovider für unsere ListView erstellen. Erstellen Sie eine neue Java-Klasse mit dem Namen DataProvider.java und fügen Sie Folgendes hinzu:

android.content.Context importieren; android.content.Intent importieren; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import java.util.ArrayList; import java.util.List; import static android.R.id.text1; Importieren Sie statische android.R.layout.simple_list_item_1; Die öffentliche Klasse DataProvider implementiert RemoteViewsService.RemoteViewsFactory {List myListView = new ArrayList <> (); Kontext mContext = null; public DataProvider (Kontextkontext, Absichtserklärung) {mContext = context; } @Override public void onCreate () {initData (); } @Override public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @Override public RemoteViews getViewAt (int position) {RemoteViews view = new RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); Rückansicht; } @Override public RemoteViews getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @Override public long getItemId (int position) {return position; } @Override public boolean hasStableIds () {return true; } private void initData () {myListView.clear (); für (int i = 1; i <= 15; i ++) {myListView.add ("ListView item" + i); }}}

AppWidgetProvider: Konfigurieren Sie Ihr Widget

Um ein Android-Widget zu erstellen, müssen Sie mehrere Dateien erstellen.

Unsere erste Widget-spezifische Datei ist ein AppWidgetProvider. Hierbei handelt es sich um einen BroadcastReceiver, in dem Sie die verschiedenen Widget-Lebenszyklusmethoden definieren, z.

Erstellen Sie eine neue Java-Klasse (Datei> Neu> Java-Klasse) mit dem Namen CollectionWidget.

Zu Beginn müssen alle Widget-Provider-Dateien aus der AppWidgetProvider-Klasse stammen. Anschließend müssen wir die Layoutressourcendatei list_widget.xml in ein RemoteViews-Objekt laden und den AppWidgetManager über das aktualisierte RemoteViews-Objekt informieren:

Öffentliche Klasse CollectionWidget erweitert AppWidgetProvider {static void updateAppWidget (Kontextkontext, AppWidgetManager appWidgetManager, int appWidgetId) {// Instanziiere das RemoteViews-Objekt // RemoteViews views = new RemoteViews (context.getPackageName (), R.layout.list_widget); setRemoteAdapter (Kontext, Ansichten); // Fordere an, dass der AppWidgetManager das Anwendungswidget aktualisiert. // appWidgetManager.updateAppWidget (appWidgetId, views); }

Erstellen Sie den Adapter

Da wir unsere Daten in einer ListView anzeigen, müssen wir in unserem AppWidgetProvider eine setRemoteAdapter () -Methode definieren. SetRemoteAdapter () entspricht dem Aufruf von AbsListView.setRemoteViewsAdapter (), ist jedoch für die Verwendung in Anwendungs-Widgets vorgesehen.

Bei dieser Methode müssen Sie die ID der AdapterView (R.id.widget_list) und die Absicht des Dienstes definieren, der die Daten für unseren RemoteViewsAdapter bereitstellt. In Kürze wird diese WidgetService-Klasse erstellt.

private static void setRemoteAdapter (Kontextkontext, @NonNull final RemoteViews-Ansichten) {views.setRemoteAdapter (R.id.widget_list, new Intent (Kontext, WidgetService.class)); }}

Definieren der Widget-Lebenszyklusmethoden

In unserem AppWidgetProvider müssen außerdem die folgenden Widget-Lebenszyklusmethoden definiert werden:

Abrufen neuer Inhalte mit onUpdate

Die Widget-Lebenszyklusmethode onUpdate () aktualisiert die Ansichten Ihres Widgets mit neuen Informationen.

Diese Methode wird jedes Mal aufgerufen:

  • Der Benutzer führt eine Aktion aus, die die Methode onUpdate () manuell auslöst.
  • Das angegebene Aktualisierungsintervall der Anwendung ist abgelaufen.
  • Der Benutzer platziert eine neue Instanz dieses Widgets auf seinem Startbildschirm.
  • Eine Broadcast-Absicht ACTION_APPWIDGET_RESTORED wird an den AppWidgetProvider gesendet. Diese Broadcast-Absicht wird ausgelöst, wenn das Widget jemals aus einer Sicherung wiederhergestellt wird.

Hier registrieren Sie auch alle Ereignishandler, die Ihr Widget verwenden soll.

Beachten Sie beim Aktualisieren eines Android-Widgets, dass Benutzer mehrere Instanzen desselben Widgets erstellen können. Möglicherweise ist Ihr Widget anpassbar, und der Benutzer entscheidet sich dafür, mehrere „Versionen“ zu erstellen, die unterschiedliche Informationen anzeigen oder den Zugriff auf einzigartige Funktionen ermöglichen.

Wenn Sie onUpdate () aufrufen, müssen Sie angeben, ob Sie jede Instanz dieses Widgets oder nur eine bestimmte Instanz aktualisieren. Wenn Sie jede Instanz aktualisieren möchten, können Sie appWidgetIds verwenden. Hierbei handelt es sich um ein Array von IDs, mit denen jede Instanz auf dem Gerät identifiziert wird.

Im folgenden Snippet aktualisiere ich jede Instanz:

@Override public void onUpdate (Kontextkontext, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// Alle Instanzen dieses Widgets aktualisieren // updateAppWidget (Kontext, appWidgetManager, appWidgetId); } super.onUpdate (context, appWidgetManager, appWidgetIds); }

Beachten Sie, dass diese onUpdate () -Methode derzeit keine Änderungen am Widget vornimmt, um den Code übersichtlich zu halten.

onEnabled: Durchführen der Ersteinrichtung

Die Lebenszyklusmethode onEnabled () wird als Antwort auf ACTION_APPWIDGET_ENABLED aufgerufen, die gesendet wird, wenn eine Instanz Ihres Widgets zum Startbildschirm für das Widget hinzugefügt wird zuerst Zeit. Wenn der Benutzer zwei Instanzen Ihres Widgets erstellt, wird onEnabled () für die erste Instanz aufgerufen, jedoch nicht für den zweiten.

Bei der onEnabled () -Lebenszyklusmethode sollten Sie alle erforderlichen Einstellungen für alle Instanzen Ihres Widgets vornehmen, z. B. die Datenbank erstellen, in der Ihre Widget-Informationen gespeichert werden.

Ich werde einen Toast anzeigen, damit Sie genau sehen können, wann diese Lebenszyklusmethode aufgerufen wird:

@Override public void onEnabled (Kontextkontext) {Toast.makeText (Kontext, "onEnabled called", Toast.LENGTH_LONG) .show (); }

Beachten Sie, dass, wenn der Benutzer alle Instanzen Ihres Widgets löscht und anschließend eine neue Instanz erstellt, diese als erste Instanz klassifiziert wird und die Lebenszyklusmethode onEnabled () erneut aufgerufen wird.

Aufräumen mit onDisabled

Die Methode onDisabled () wird als Antwort auf ACTION_APPWIDGET_DISABLED aufgerufen, die ausgelöst wird, wenn der Benutzer die löscht zuletzt Instanz Ihres Widgets.

Mit dieser Widget-Lebenszyklusmethode sollten Sie alle Ressourcen bereinigen, die Sie mit der Methode onEnabled () erstellt haben, z. B. die in onEnabled () erstellte Datenbank löschen.

Um unseren Code übersichtlich zu halten, zeige ich bei jedem Auslösen dieser Methode einfach einen Toast an:

@Override public void onDisabled (Kontextkontext) {Toast.makeText (Kontext, "onDisabled called", Toast.LENGTH_LONG) .show (); }

Der fertige AppWidgetProvider

Ihre CollectionWidget-Datei sollte jetzt ungefähr so ​​aussehen:

import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; android.content.Context importieren; import androidx.annotation.NonNull; android.content.Intent importieren; import android.widget.RemoteViews; android.widget.Toast importieren; // Aus der AppWidgetProvider-Klasse erweitern // Öffentliche Klasse CollectionWidget erweitert AppWidgetProvider {static void updateAppWidget (Kontextkontext, AppWidgetManager appWidgetManager, int appWidgetId) {// Die Layoutressourcendatei in ein RemoteViews-Objekt laden. getPackageName (), R.layout.list_widget); setRemoteAdapter (Kontext, Ansichten); // AppWidgetManager über das RemoteViews-Objekt informieren // appWidgetManager.updateAppWidget (appWidgetId, views); } @Override public void onUpdate (Kontextkontext, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (Kontext, appWidgetManager, appWidgetId); } super.onUpdate (context, appWidgetManager, appWidgetIds); } @Override public void onEnabled (Kontextkontext) {Toast.makeText (Kontext, "onEnabled aufgerufen", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (Kontextkontext) {Toast.makeText (Kontext, "onDisabled aufgerufen", Toast.LENGTH_LONG) .show (); } private static void setRemoteAdapter (Kontextkontext, @NonNull final RemoteViews-Ansichten) {views.setRemoteAdapter (R.id.widget_list, new Intent (Kontext, WidgetService.class)); }}

Die AppWidgetProviderInfo-Datei

Für Ihr Anwendungs-Widget ist außerdem eine AppWidgetProviderInfo-Datei erforderlich, in der mehrere wichtige Eigenschaften definiert sind, einschließlich der Mindestabmessungen Ihres Widgets und der Häufigkeit, mit der es aktualisiert werden soll.

Die AppWidgetProviderInfo-Datei wird im Ordner res / xml Ihres Projekts gespeichert.

Wenn Ihr Projekt diesen Ordner noch nicht enthält, müssen Sie ihn erstellen:

  • Klicken Sie bei gedrückter Ctrl-Taste auf den res-Ordner Ihres Projekts.
  • Wählen Sie Neu> Android-Ressourcenverzeichnis.
  • Öffnen Sie im folgenden Fenster die Dropdown-Liste Ressourcentyp und wählen Sie XML aus.
  • Der Verzeichnisname sollte automatisch auf xml aktualisiert werden. Ist dies nicht der Fall, müssen Sie ihn manuell ändern.
  • OK klicken.

Als Nächstes erstellen Sie eine collection_widget_info-Datei, die wir als AppWidgetProviderInfo verwenden:

  • Klicken Sie bei gedrückter Ctrl-Taste auf den XML-Ordner Ihres Projekts.
  • Wählen Sie Neu> XML-Ressourcendatei.
  • Nennen Sie diese Datei collection_widget_info.
  • OK klicken.

In unserer AppWidgetProviderInfo-Datei müssen die folgenden Eigenschaften definiert werden:

1. android: previewImage

Dies ist die Grafik, die Ihr Anwendungs-Widget in der Widget-Auswahl des Geräts darstellt.

Wenn Sie kein previewImage bereitstellen, verwendet Android stattdessen das Symbol Ihrer Anwendung. Damit Benutzer Ihr Widget in der Widget-Auswahl auswählen können, sollten Sie eine Grafik bereitstellen, die zeigt, wie Ihr Widget aussehen wird, wenn es auf dem Startbildschirm des Benutzers ordnungsgemäß konfiguriert ist.

Der einfachste Weg, ein Vorschaubild zu erstellen, ist die Verwendung der Widget-Vorschau-Anwendung, die im Android-Emulator enthalten ist. Mit dieser App können Sie Ihr Widget konfigurieren und anschließend ein Bild generieren, das Sie dann in Ihrem Android-Projekt verwenden können.

Dieses Bild wird erstellt, sobald wir unser Widget erstellt haben. Daher verwende ich die automatisch generierte Ressource "mipmap / ic_launcher" als temporäres Vorschaubild.

2. android: widgetCategory

Anwendungs-Widgets müssen in einem App Widget-Host platziert werden, bei dem es sich normalerweise um den Standard-Android-Startbildschirm handelt, es kann sich aber auch um einen Launcher eines Drittanbieters wie Evie Launcher oder Nova Launcher handeln.

Zwischen API-Level 17 und 20 konnten Anwendungs-Widgets auf dem Homescreen platziert werden oder Der Sperrbildschirm, aber die Unterstützung von Sperrbildschirmen wurde in API-Stufe 21 nicht mehr empfohlen.

Mit dem Attribut android: widgetCategory können Sie festlegen, ob Ihr App-Widget auf dem Startbildschirm, dem Sperrbildschirm (von Android als „Tastensperre“ bezeichnet) oder beiden platziert werden kann. Da es in den neuesten Android-Versionen nicht möglich ist, Widgets auf dem Sperrbildschirm zu platzieren, wird nur der Homescreen als Ziel ausgewählt.

Um die Privatsphäre des Nutzers zu schützen, sollte Ihr Widget keine vertraulichen oder privaten Informationen anzeigen, wenn es auf dem Sperrbildschirm platziert wird.

Wenn Sie Benutzern die Möglichkeit geben, Ihr Widget auf dem Sperrbildschirm zu platzieren, kann jeder, der auf das Gerät des Benutzers blickt, möglicherweise Ihr Widget und den gesamten Inhalt sehen. Um die Privatsphäre des Nutzers zu schützen, sollte Ihr Widget keine vertraulichen oder privaten Informationen anzeigen, wenn es auf dem Sperrbildschirm platziert wird. Wenn Ihr Widget persönliche Daten enthält, sollten Sie möglicherweise separate Layouts für Startbildschirm und Sperrbildschirm bereitstellen.

3. android: initialLayout

Dies ist die Layout-Ressourcendatei, die Ihr Widget verwenden soll, wenn es auf dem Startbildschirm platziert wird. Für unser Projekt lautet sie list_widget.xml.

4. android: resizeMode = ”horizontal | vertikal”

Mit dem Attribut android: resizeMode können Sie festlegen, ob die Größe Ihres Widgets horizontal, vertikal oder entlang beider Achsen geändert werden kann.

Um sicherzustellen, dass Ihr Widget auf verschiedenen Bildschirmen korrekt angezeigt wird und funktioniert, wird empfohlen, die horizontale Größenänderung Ihres Widgets zuzulassen und vertikal, es sei denn, Sie haben einen bestimmten Grund, dies nicht zu tun.

5. Android: minHeight und Android: minWidth

Wenn die Größe Ihres Widgets geändert werden kann, müssen Sie sicherstellen, dass der Benutzer Ihr Widget nicht so weit verkleinert, dass es unbrauchbar wird. Mithilfe der Attribute "minHeight" und "minWidth" können Sie festlegen, bei welcher Größe Ihre App durch den Benutzer verkleinert wird.

Diese Werte stellen auch die ursprüngliche Größe Ihres Widgets dar. Wenn also die Größe Ihres Widgets nicht geändert werden kann, definieren minHeight und minWidth die permanente Größe des Widgets.

6. android: updatePeriodMillis

In AppWidgetProviderInfo können Sie auch angeben, wie oft Ihr Widget neue Informationen anfordern soll.

Das kleinste unterstützte Aktualisierungsintervall beträgt alle 1800000 Millisekunden (30 Minuten). Selbst wenn Sie ein kürzeres Aktualisierungsintervall angeben, wird Ihr Widget nur einmal alle halbe Stunde aktualisiert.

Während Sie möglicherweise die neuesten Informationen so schnell wie möglich anzeigen möchten, zeigt das System werden Wecken Sie ein schlafendes Gerät, um neue Informationen abzurufen. Häufige Updates können den Akku eines Geräts beschädigen, insbesondere in Zeiten, in denen das Gerät längere Zeit nicht benutzt wird, z. B. über Nacht. Das bestmögliche Benutzererlebnis zu bieten, bedeutet, ein Gleichgewicht zwischen der Begrenzung des Batterieverbrauchs und der Bereitstellung neuer Informationen innerhalb eines angemessenen Zeitrahmens zu finden.

Sie sollten auch die Art des Inhalts berücksichtigen, der in Ihrem Widget angezeigt wird.

Sie sollten auch die Art des Inhalts berücksichtigen, den Ihre Widgets für Android anzeigen. Beispielsweise muss ein Wetter-Widget möglicherweise nur einmal pro Tag eine aktualisierte Vorhersage abrufen, während eine App, die aktuelle Nachrichten anzeigt, häufiger aktualisiert werden muss.

Um dieses perfekte Gleichgewicht zu finden, müssen Sie möglicherweise Ihr Widget in einer Reihe von Aktualisierungshäufigkeiten testen und die Auswirkung auf die Akkulaufzeit sowie die Aktualität des Widget-Inhalts messen. Wenn Sie eine willensstarke Gruppe von Testern haben, können Sie sogar A / B-Tests einrichten, um festzustellen, ob einige Aktualisierungsfrequenzen positiver als andere empfangen werden.

Lesen Sie auch: AndroidManifest.xml alles, was Sie wissen müssen

Wenn Sie das perfekte Aktualisierungsintervall ermittelt haben, können Sie beim Entwickeln und Testen Ihrer App ein kürzeres Intervall verwenden. Sie können beispielsweise die kürzestmögliche Aktualisierungshäufigkeit (android: updatePeriodMillis = "1800000") verwenden, wenn Sie testen, ob die Methode onUpdate () Ihrer App korrekt ausgelöst wird, und diesen Wert dann ändern, bevor Sie Ihre App für die breite Öffentlichkeit freigeben.

Die ausgefüllte AppWidgetProviderInfo

Die fertige Datei collection_widget_info.xml sollte ungefähr so ​​aussehen:

Verwirren Sie nicht den Homescreen des Benutzers!

Um sicherzustellen, dass der Homescreen nie überladen aussieht, werden wir unserem Widget einige Abstände und Ränder hinzufügen. Wenn Ihr Projekt noch keine dimens.xml-Datei enthält, müssen Sie eine erstellen:

  • Klicken Sie bei gedrückter Ctrl-Taste auf den Werteverzeichnis Ihres Projekts.
  • Wählen Sie Neu> Werteressourcendatei.
  • Geben Sie dieser Datei den Namen dimens.
  • OK klicken.

Öffnen Sie Ihre dimens.xml-Datei und definieren Sie die folgenden Werte für Rand und Abstand:

10dp 8dp

Senden von Daten an das Widget

Als Nächstes müssen wir einen Widget-Service erstellen, der für das Senden unserer Sammlungsdaten an das Widget verantwortlich ist.

Erstellen Sie eine neue Java-Klasse (Neu> Java-Klasse) mit dem Namen WidgetService und fügen Sie Folgendes hinzu:

android.content.Intent importieren; import android.widget.RemoteViewsService; public class WidgetService erweitert RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (Absicht) {return new DataProvider (this, intent); }}

Registrieren Sie Ihr Widget im Manifest

Wir müssen jetzt einige Änderungen am Manifest unseres Projekts vornehmen.

Öffnen Sie zunächst das Manifest und registrieren Sie Ihr Widget als BroadcastReceiver. Wir müssen auch einen Absichtsfilter für die Aktion android.appwidget.action.APPWIDGET_UPDATE hinzufügen:

Als Nächstes müssen Sie den App-Widget-Anbieter angeben:

Schließlich müssen wir den Dienst deklarieren, der Daten an unser Widget sendet, in diesem Fall die WidgetService-Klasse. Dieser Dienst erfordert die Berechtigung android.permission.BIND_REMOTEVIEWS:

Stellen Sie Ihr Widget auf die Probe

Wenn Sie diesem Tutorial gefolgt sind, verfügen Sie jetzt über ein vollständiges Sammlungs-Widget, das eine Reihe von Daten auf dem Startbildschirm des Benutzers anzeigt.

Wenn dies ein reales Android-Projekt war, haben Sie in der Regel die Lebenszyklusmethoden, insbesondere die Methode onUpdate (), erweitert. Dies ist jedoch alles, was wir zum Erstellen eines Widgets benötigen, das Sie auf Ihrem Android-Gerät installieren und testen können:

  • Installieren Sie dieses Projekt auf einem kompatiblen Android-Smartphone, Tablet oder AVD (Android Virtual Device).
  • Drücken Sie lange auf einen leeren Bereich des Startbildschirms und wählen Sie Widgets, wenn Sie dazu aufgefordert werden. Dadurch wird die Widget-Auswahl gestartet.
  • Wischen Sie durch die Widget-Auswahl, bis Sie das gerade erstellte Anwendungs-Widget finden.
  • Drücken Sie lange auf dieses Widget, um es Ihrem Homescreen hinzuzufügen.
  • Da dies die erste Instanz dieses bestimmten Widgets ist, sollte die onEnabled () -Methode ausgeführt werden, und es wird ein Toast mit dem Namen "onEnabled" angezeigt.
  • Ändern Sie die Größe Ihres Widgets. Wenn Sie eine unterstützte Mindestgröße festlegen, stellen Sie sicher, dass Sie das Widget nicht über diesen Wert hinaus verkleinern können.
  • Testen Sie, ob die ListView wie erwartet einen Bildlauf durchführt.
  • Als nächstes sollten Sie die onDisabled () -Methode überprüfen, indem Sie Ihr Widget löschen. Drücken Sie lange auf das Widget und wählen Sie dann Vom Startbildschirm entfernen. Da dies die letzte Instanz dieses bestimmten Widgets ist, sollte die onDisabled () -Methode ausgeführt werden, und es wird ein Toast mit dem Namen "onDisabled called" angezeigt.

Dies ist alles, was Sie benötigen, um ein funktionsfähiges Android-Anwendungs-Widget bereitzustellen. Es gibt jedoch einige Ergänzungen, die die Benutzerfreundlichkeit häufig verbessern können. In den folgenden Abschnitten empfehlen wir Benutzern, dieses Widget in der Widget-Auswahl auszuwählen, indem Sie ein Vorschaubild erstellen, in dem das Widget optimal zur Geltung kommt. Ich zeige Ihnen auch, wie Sie ein vollständig anpassbares Widget erstellen, indem Sie Ihrem Projekt eine Konfigurationsaktivität hinzufügen.

Erstellen eines Vorschaubilds für ein Android-Widget

Wenn Sie sich Ihr Android-Gerät schnappen und durch die Widget-Auswahl streichen, wird jedes Widget durch ein Bild dargestellt, das normalerweise zeigt, wie es aussieht, sobald es auf dem Startbildschirm des Benutzers konfiguriert ist.

Um Benutzer zur Auswahl Ihres Widgets zu ermutigen, sollten Sie ein Vorschaubild bereitstellen, das alle nützlichen Informationen und Funktionen Ihres Widgets hervorhebt.

Mit der Widget-Vorschau-Anwendung, die im Android-Emulator enthalten ist, können Sie schnell und einfach ein Vorschaubild erstellen.

Beachten Sie, dass die Widget-Vorschau nicht in den neuesten Android-Systemabbildungen enthalten ist. Daher müssen Sie eine AVD mit Nougat (API Level 25) oder früher erstellen:

  • Installieren Sie Ihre Anwendung auf einer AVD, auf der API 25 oder niedriger ausgeführt wird.
  • Öffnen Sie die App-Schublade des AVD und starten Sie die Widget-Vorschau-App.
  • In der Widget-Vorschau wird eine Liste aller derzeit auf dieser AVD installierten Anwendungen angezeigt. Wählen Sie Ihre Anwendung aus der Liste aus.

  • Ihr Widget wird nun auf einem leeren Hintergrund angezeigt. Verbringen Sie einige Zeit damit, die Größe Ihres Widgets zu ändern und zu optimieren, bis es das Beste zeigt, was Ihr Widget zu bieten hat.
  • Wenn Sie mit dem Erscheinungsbild und dem Inhalt Ihres Widgets zufrieden sind, wählen Sie Schnappschuss aufnehmen.

  • Um Ihren Schnappschuss abzurufen, wechseln Sie zurück zu Android Studio und wählen Sie in der Symbolleiste Ansicht> Tool Windows> Gerätedateiexplorer. Dadurch wird der Gerätedateiexplorer von Android Studio gestartet.
  • Navigieren Sie im Gerätedatei-Explorer zu SD-Karte / Download. Ihr Vorschaubild sollte im folgenden Format gespeichert sein: _ori_.png

  • Ziehen Sie dieses Bild aus Android Studio und legen Sie es an einem leicht zugänglichen Ort ab, z. B. auf Ihrem Desktop.
  • Geben Sie dieser Bilddatei einen aussagekräftigen Namen.
  • Ziehen Sie die Datei in den zeichnungsfähigen Ordner Ihres Projekts und legen Sie sie dort ab.
  • Öffnen Sie Ihre AppWidgetProviderInfo, die für dieses Projekt collection_widget_info.xml lautet.
  • Suchen Sie die Zeile android: previewImage = ”@ mipmap / ic_launcher” und aktualisieren Sie sie, um auf Ihr Vorschaubild zu verweisen.

Ihr Widget verwendet nun diese neue Bildressource als Vorschaubild:

  • Installieren Sie das aktualisierte Projekt auf Ihrem physischen Android-Gerät oder AVD.
  • Drücken Sie lange auf einen leeren Bereich des Homescreens.
  • Tippen Sie auf Widgets, um die Widget-Auswahl zu starten.
  • Blättern Sie zu Ihrem Widget. Jetzt sollte das aktualisierte Vorschaubild verwendet werden.

Anpassbare Widgets: Hinzufügen einer Konfigurationsaktivität

Eine Konfigurationsaktivität wird automatisch gestartet, wenn der Benutzer jede Instanz Ihres Widgets auf seinem Startbildschirm platziert.

Es gibt verschiedene Gründe, warum Sie Ihrem Projekt eine Konfigurationsaktivität hinzufügen möchten.

Widgets bieten in der Regel die beste Benutzererfahrung, wenn sie Zugriff auf die Informationen oder Funktionen bieten, die für den einzelnen Benutzer am wichtigsten sind.

Erstens erfordern einige Widgets eine Erstkonfiguration. Beispielsweise muss ein Widget, das Verkehrswarnungen anzeigt, möglicherweise die Privatadresse des Benutzers, den Ort, an dem sie arbeiten, und die Zeiten kennen, zu denen sie normalerweise pendeln. Ohne Eingabe dieser Informationen ist Ihr Widget möglicherweise völlig unbrauchbar!

Darüber hinaus bieten Widgets in der Regel die beste Benutzererfahrung, wenn sie Zugriff auf die Informationen oder Funktionen bieten, die für den einzelnen Benutzer am wichtigsten sind. Durch Hinzufügen einer Konfigurationsaktivität zu Ihrem Projekt können Sie den Benutzern die Freiheit geben, auszuwählen genau Was ist in Ihrem Widget enthalten?

Selbst relativ unkomplizierte Anpassungen, wie das Ändern des Hintergrunds oder der Schriftart eines Widgets, können sich positiv auf die Benutzerfreundlichkeit auswirken. Schließlich wird niemand ein Widget zu schätzen wissen, das sich optisch mit dem Rest seines Homescreens überschneidet!

Niemand wird ein Widget zu schätzen wissen, das sich optisch mit dem Rest seines Homescreens überschneidet!

Alternativ kann es vorkommen, dass Sie eine lange Liste mit Inhalten haben, die Sie in Ihr Widget aufnehmen möchten, und Sie Schwierigkeiten haben, Ihre Optionen einzugrenzen. Eine Konfigurationsaktivität kann eine Möglichkeit sein, all Ihre Ideen sinnvoll zu nutzen, ohne Erstellen ein überladenes, verwirrendes Widget. Bedenken Sie jedoch, dass das Einrichten eines Widgets keine lästige Pflicht sein sollte. Wenn Sie also eine Konfigurationsaktivität bereitstellen, sollten Sie sich auf drei Konfigurationsoptionen beschränken.

Fügen wir unserem Projekt eine Konfigurationsaktivität hinzu!

Erstens benötigt unsere Konfigurationsaktivität ein Layout. Erstellen Sie daher eine neue Layoutressourcendatei mit dem Namen config_activity.xml.

Ich werde die folgenden Schaltflächen zu diesem Layout hinzufügen:

  • Eine Konfigurationsschaltfläche. In einem realen Projekt würde diese Schaltfläche das Widget auf irgendeine Weise ändern, z. B. Hinzufügen oder Entfernen von Inhalten oder Ändern der Häufigkeit, mit der das Widget aktualisiert wird. Um unseren Code übersichtlich zu halten, wird durch Klicken auf diese Schaltfläche einfach ein Toast mit Konfigurationsoptionen angezeigt.
  • Eine Setup-Schaltfläche. Wenn der Benutzer mit der Konfiguration seines Widgets zufrieden ist, wird durch Drücken dieser Schaltfläche das neu konfigurierte Widget auf dem Startbildschirm angezeigt.

Hier ist meine fertige Datei config_activity.xml:

Erstellen Sie die Konfigurationsaktivität

Jetzt müssen wir unsere Konfigurationsaktivität erstellen.

Erstellen Sie zunächst eine neue Java-Klasse mit dem Namen ConfigActivity. In dieser Aktivität rufen wir die App-Widget-ID von der Absicht ab, mit der die Konfigurationsaktivität gestartet wurde. Wenn diese Absicht keine Widget-ID hat, müssen wir die finish () -Methode aufrufen:

Intent intent = getIntent (); Bundle extras = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }

Als Nächstes müssen wir eine Rückgabeabsicht erstellen, die ursprüngliche appWidgetId übergeben und die Ergebnisse aus der Konfiguration festlegen. Aktivität:

Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); Fertig(); }}}

Wenn Sie eine Konfigurationsaktivität angeben, wird der ACTION_APPWIDGET_UPDATE-Broadcast nicht automatisch gesendet, wenn die Konfigurationsaktivität gestartet wird. Dies bedeutet, dass die Methode onUpdate () verwendet wird Gewohnheit aufgerufen werden, wenn der Benutzer eine Instanz Ihres Widgets erstellt.

Um sicherzustellen, dass Ihr Widget mit aktuellen Informationen und Inhalten erstellt wird, geben Sie Ihre Konfigurationsaktivität an Muss Löst die erste onUpdate () -Anforderung aus.

Hier ist die fertige ConfigActivity:

android.app.Activity importieren; import android.appwidget.AppWidgetManager; android.os.Bundle importieren; import android.widget.Button; android.content.Intent importieren; android.view.View importieren; import android.view.View.OnClickListener; android.widget.Toast importieren; public class ConfigActivity erweitert Activity {@Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Button setupWidget = (Button) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (neuer OnClickListener () {@Override public void onClick (View v) {handleSetupWidget ();}}); Button configButton = (Button) findViewById (R.id.configButton); configButton.setOnClickListener (neuer OnClickListener () {@Override public void onClick (View v) {handleConfigWidget ();}}); } private void handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Konfigurationsoptionen", Toast.LENGTH_LONG) .show (); } int appWidgetId; private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Intent intent = getIntent (); Bundle extras = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // TO DO: Führe die Konfiguration aus // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); Fertig(); }}}

Nachdem Sie eine Konfigurationsaktivität erstellt haben, müssen Sie diese Aktivität im Manifest deklarieren und angeben, dass sie die APPWIDGET_CONFIGURE-Aktion akzeptiert:

Da auf eine Konfigurationsaktivität außerhalb des Paketbereichs verwiesen wird, müssen wir diese Aktivität in unserer AppWidgetProviderInfo deklarieren, die in diesem Fall die Datei collection_widget_info.xml ist:

android: configure = "com.jessicathornsby.collectionwidget.ConfigActivity">

Testen Sie Ihr Projekt

Jetzt ist es Zeit, Ihr fertiges Projekt auf den Prüfstand zu stellen:

  • Installieren Sie Ihr aktualisiertes Projekt auf einem physischen Android-Gerät oder einer AVD.
  • Löschen Sie alle vorherigen Instanzen Ihres Widgets, um sicherzustellen, dass Sie mit der neuesten Version arbeiten.
  • Drücken Sie lange auf einen leeren Bereich des Startbildschirms und wählen Sie Widgets, wenn Sie dazu aufgefordert werden.
  • Finden Sie Ihr Widget in der Widget-Auswahl und drücken Sie lange, um es auszuwählen.
  • Legen Sie das Widget auf Ihrem Homescreen ab. Die Konfigurationsaktivität sollte automatisch gestartet werden.
  • Klicken Sie auf die Schaltfläche "Konfiguration ausführen", und ein Toast mit den Konfigurationsoptionen sollte angezeigt werden, um zu bestätigen, dass diese Interaktion erfolgreich registriert wurde.
  • Stellen Sie sich vor, Sie haben die Einstellungen des Widgets optimiert und können es nun auf Ihrem Homescreen platzieren. Tippen Sie auf die Schaltfläche Create The Widget (Widget erstellen), um das Widget erfolgreich zu erstellen.

Sie können das fertige Sammlungs-Widget-Projekt von GitHub herunterladen.

Einpacken

In diesem Artikel haben wir ein bildlauffähiges Sammlungswidget erstellt, das einen Datensatz auf dem Startbildschirm des Benutzers anzeigt.

Wenn Sie mit diesem Projekt weiterarbeiten möchten, können Sie versuchen, der Methode onUpdate () Ihren eigenen Code hinzuzufügen, um ein Widget zu erstellen, das in dem in Ihrer AppWidgetProviderInfo-Datei (collection_widget_info) definierten Intervall mit neuen Informationen aktualisiert wird.

Wenn Sie ein Android-Widget erstellen, teilen Sie Ihre Kreationen in den Kommentaren unten mit!

Google tadia it eit geraumer Zeit einer der mit pannung erwarteten Google-Diente, mit denen pieler piele auf verchiedenen Geräten per treaming pielen können. Da Unternehmen puht auch einen k...

Google tadia it der nächte Game-treaming-Dient de uchrieen, der in Kürze verfügbar ein wird. In dieem Quiz teten wir, wie viel ie darüber wien. E enthält zehn Fragen, die ich ...

Seitenwahl