Opret en Android-widget til din app

Forfatter: Lewis Jackson
Oprettelsesdato: 13 Kan 2021
Opdateringsdato: 1 Juli 2024
Anonim
Tip! Kontroller app-ikoner i iOS og iPadOS med app’en genveje - Henvendt til synshandicappede
Video.: Tip! Kontroller app-ikoner i iOS og iPadOS med app’en genveje - Henvendt til synshandicappede

Indhold


Siden OS's tidlige dage har widgets til Android gjort det muligt for brugere at engagere sig i deres foretrukne apps fra komforten på deres hjemmeskærm. Så hvordan opretter du en Android-widget?

For udvikleren giver widgets din applikation en værdifuld tilstedeværelse på brugerens hjemmeskærm. I stedet for at blive gemt ude af syne i appskuffen, vil brugerne blive mindet om din app hver eneste gang de ser på deres hjemmeskærm - samtidig med at de får en forhåndsvisning af din apps mest interessante og nyttige indhold.

Widgets giver din applikation en værdifuld tilstedeværelse på brugerens hjemmeskærm

I denne artikel viser jeg dig, hvordan du giver en bedre brugeroplevelse, mens jeg opfordrer brugerne til at engagere sig i din app ved at oprette en Android-widget! I slutningen af ​​denne artikel har du oprettet en widget, der kan rulles, der viser et komplet datasæt på brugerens hjemmeskærm.


For at sikre, at du leverer den slags widget, som brugerne har vil have for at placere på deres hjemmeskærm, opretter vi også en konfigurationsaktivitet, der giver brugerne mulighed for at tilpasse widgetens indhold, udseende og funktioner. Endelig viser jeg, hvordan du kan tilskynde folk til at bruge din widget ved at oprette et widget-preview-billede, der viser det bedste, som din widget har at tilbyde.

Læs også: Udvikling til sammenklappelige enheder: Hvad du har brug for at vide

Hvad er widgets til Android?

En applikationswidget er et let, miniature-program, der lever på brugerens hjemmeskærm.

Widgets til Android kan levere et interval af indhold, men falder generelt inden for en af ​​følgende kategorier:

  • Informationswidget. Dette er en ikke-rullbar widget, der viser nogle oplysninger, såsom dagens vejrprognose eller dato og klokkeslæt.
  • Samling widgets. Dette er en rullbar widget, der viser et sæt relaterede data, der er formateret som en ListView, GridView, StackView eller en AdapterViewFlipper. Indsamlingswidgets understøttes normalt af en datakilde, f.eks. En database eller en matrix.
  • Kontroller widgets. Disse widgets fungerer som en fjernbetjening, der giver brugerne mulighed for at interagere med din applikation, uden at skulle bringe det på forgrunden. Apps, der afspiller medier, såsom podcasts eller musik, har ofte kontrolwidgets, der giver brugeren mulighed for at udløse handlinger, Play, Pause og Skip direkte fra deres hjemmeskærm.
  • Hybrid widgets. Nogle gange kan du muligvis levere en bedre brugeroplevelse ved at kombinere elementer fra flere kategorier. For eksempel, hvis du udvikler en kontrolwidget til en musikapplikation, kan du give Play, Pause og Skip kontroller, men du kan også beslutte at vise nogle oplysninger, f.eks. Sangens titel og artist. Hvis du beslutter dig for at blande og matche, skal du ikke blive båret væk! Widgets har en tendens til at levere den bedste brugeroplevelse, når de giver let adgang til en lille mængde rettidig, relevant information eller et par almindeligt anvendte funktioner. For at hjælpe med at holde dine hybridwidgets let, anbefales det, at du identificerer din widget's primære kategori, udvikler den i henhold til den kategori og derefter tilføj et par elementer fra widgetens sekundære kategori.

Har mit projekt virkelig brug for en applikationswidget?

Der er flere grunde til, at du bør overveje at tilføje en applikationswidget til dit Android-projekt.


Widgets til Android kan forbedre brugeroplevelsen

Som en generel regel, jo færre navigeringstrin, der kræves for at udføre en opgave, desto bedre er brugeroplevelsen.

Ved at tilvejebringe en applikationswidget kan du fjerne flere navigeringstrin fra din apps mest anvendte strømme. I det bedste tilfælde vil dine brugere være i stand til at få de oplysninger, de har brug for, bare ved at kigge på deres hjemmeskærm eller udføre den ønskede opgave ved blot at trykke på en knap i din kontrolwidget.

Mere kraftfulde end genveje til applikationer

App-widgets reagerer ofte på onClick-begivenheder ved at starte det øverste niveau i den tilknyttede applikation, der ligner en programgenvej. Widgets kan dog også give direkte adgang til specifikke aktiviteter i en applikation, for eksempel ved at trykke på en widgets meddelelse om ny modtagelse kan det starte den tilknyttede app med den nye, der allerede er åben.

Ved at indlejre flere links i din widgets layout kan du give et-tryks adgang til alle dine apps vigtigste aktiviteter og fjerne endnu flere navigeringstrin fra dine mest almindeligt anvendte strømme.

Ved at indlejre flere links i din widgets layout kan du give et-trykst adgang til alle dine apps vigtigste aktiviteter.

Bemærk, at widgets kun reagerer på onClick-begivenheder, som forhindrer brugere i at utilsigtet interagere med din widget, mens de svejer rundt på hjemmeskærmen. Den eneste undtagelse er, når brugeren forsøger at slette din widget ved at trække den mod deres hjemmeskærms fjernelse, da din widget vil reagere på en lodret svejsebevægelse i dette scenarie.

Denne interaktion styres af Android-systemet, så du behøver ikke at bekymre dig om manuelt at implementere lodret swipe-support i din widget.

Opret en Android-widget til at drive langsigtet engagement

At overbevise folk om at downloade din app er kun det første skridt til at oprette en vellykket Android-applikation. Chancerne er, at hvis du griber din egen Android-smartphone eller tablet og stryger gennem appskuffen, vil du opdage flere apps, som du ikke har brugt i dage, uger eller potentielt endda måneder!

Læs også:Kom godt i gang med Facebook til Android SDK

Når din app er installeret med succes på brugerens enhed, skal du arbejde hårdt for at holde dem i gang og nyde din app. At give din app tilstedeværelse på hjemmeskærmen kan være et kraftfuldt værktøj til at hjælpe med at skabe langsigtet engagement, simpelthen fordi det er en konstant påmindelse om, at din applikation findes!

En godt designet widget kan også fungere som en løbende annonce for din app. Hver gang brugeren kigger på deres hjemmeskærm, har din widget mulighed for aktivt at opfordre dem til at engagere sig igen i din app ved at præsentere dem for alt dit apps mest interessante og nyttige indhold.

Oprettelse af en widget til samling af apper

I denne selvstudie bygger vi en samling-widget, der viser en matrix som en rullbar ListView.

For at hjælpe dig med at spore app-widgetens livscyklus udløser denne widget også forskellige toasts, når den bevæger sig gennem de forskellige livscyklustilstande. Mot slutningen af ​​denne tutorial forbedrer vi vores widget med et brugerdefineret preview-billede, der vises i Android's Widget Picker, og en konfigurationsaktivitet, der giver brugerne mulighed for at tilpasse widgetten, inden de placeres på deres hjemmeskærm.

Opret et nyt Android-projekt med de valgte indstillinger, og lad os komme i gang!

Opbygning af din widgets layout

Lad os definere widgetens brugergrænseflade (UI) for at starte.

Applikations widgets vises under en proces uden for din applikation, så du kun kan bruge layout og visninger, der understøttes af RemoteViews.

Når du bygger dit layout, er du begrænset til følgende:

  • AnalogClock
  • Knap
  • Kronometer
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • LinearLayout
  • ProgressBar
  • RelativeLayout
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • Listevisning
  • StackView
  • ViewFlipper

Bemærk, at underklasser af ovennævnte klasser og visninger er ikke understøttet.

Opret en ny layoutressourcefil med navnet list_widget.xml. Da vi viser vores data ved hjælp af en ListView, fungerer dette layout hovedsageligt som en container til en element:

Udfyld samlingen widget

Dernæst skal vi oprette en dataleverandør til vores ListView. Opret en ny Java-klasse ved navn DataProvider.java og tilføj følgende:

import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import java.util.ArrayList; import java.util.List; import statisk android.R.id.text1; import statisk android.R.layout.simple_list_item_1; public class DataProvider implementerer RemoteViewsService.RemoteViewsFactory {List myListView = new ArrayList <> (); Kontekst mContext = null; public DataProvider (Kontekstkontekst, Intent intention) {mContext = context; } @Override offentligt ugyldigt onCreate () {initData (); } @Override offentligt ugyldigt onDataSetChanged () {initData (); } @Override offentligt ugyldigt onDestroy () {} @Override offentligt int getCount () {return myListView.size (); } @Override offentlige RemoteViews getViewAt (int position) {RemoteViews view = new RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); returvisning; } @Override offentlige RemoteViews getLoadingView () {return null; } @Override offentligt int getViewTypeCount () {return 1; } @ Overstyr offentligt lang getItemId (int position) {return position; } @Override offentlig boolsk hasStableIds () {return true; } privat tomrum initData () {myListView.clear (); for (int i = 1; i <= 15; i ++) {myListView.add ("ListView item" + i); }}}

AppWidgetProvider: Konfiguration af din widget

For at oprette en Android-widget skal du oprette flere filer.

Vores første widget-specifikke fil er en AppWidgetProvider, som er en BroadcastReceiver, hvor du definerer de forskellige widget-livscyklusmetoder, såsom den metode, der kaldes, når din widget først oprettes, og den metode, der kaldes, når denne widget til sidst slettes.

Opret en ny Java-klasse (Fil> Ny> Java-klasse) med navnet CollectionWidget.

For at starte skal alle widgetudbyderfiler udvides fra klassen AppWidgetProvider. Vi bliver derefter nødt til at indlæse list_widget.xml-layout-ressourcefilen i et RemoteViews-objekt og informere AppWidgetManager om det opdaterede RemoteViews-objekt:

public class CollectionWidget udvider AppWidgetProvider {statisk tom opdateringAppWidget (kontekstkontekst, AppWidgetManager appWidgetManager, int appWidgetId) {// Instant RemoteViews-objektet // RemoteViews views = nye RemoteViews (context.getPackageName (), R.layout.list_widget) setRemoteAdapter (kontekst, visninger); // Anmod om, at AppWidgetManager opdaterer applikationswidget // appWidgetManager.updateAppWidget (appWidgetId, visninger); }

Opret adapteren

Da vi viser vores data i en ListView, er vi nødt til at definere en setRemoteAdapter () -metode i vores AppWidgetProvider. SetRemoteAdapter () svarer til at kalde AbsListView.setRemoteViewsAdapter (), men er designet til at blive brugt i applikations widgets.

I denne metode er vi nødt til at definere id'et for AdapterView (R.id.widget_list) og hensigten med den service, der til sidst vil levere dataene til vores RemoteViews Adapter - vi opretter denne WidgetService-klasse inden for kort tid.

privat statisk tomrum setRemoteAdapter (kontekstkontekst, @NonNull endelige RemoteViews-visninger) {views.setRemoteAdapter (R.id.widget_list, ny hensigt (kontekst, WidgetService.class)); }}

Definition af widgetens livscyklusmetoder

I vores AppWidgetProvider er vi også nødt til at definere følgende widget-livscyklusmetoder:

Henter nyt indhold med onUpdate

Metoden onUpdate ()-widget-livscyklus er ansvarlig for at opdatere din widget-visninger med nye oplysninger.

Denne metode kaldes hver gang:

  • Brugeren udfører en handling, der manuelt udløser onUpdate () -metoden.
  • Applikationens specificerede opdateringsinterval er gået.
  • Brugeren placerer en ny forekomst af denne widget på deres hjemmeskærm.
  • En ACTION_APPWIDGET_RESTORED udsendelsesintention sendes til AppWidgetProvider. Denne udsendelsesintention udløses, hvis widgeten nogensinde gendannes fra sikkerhedskopi.

Det er også her, du registrerer alle eventhandlere, som din widget skal bruge.

Når du opdaterer en Android-widget, er det vigtigt at huske, at brugere kan oprette flere forekomster af den samme widget. F.eks. Kan din widget tilpasses, og brugeren beslutter at oprette flere "versioner", der viser forskellige oplysninger eller giver adgang til unik funktionalitet.

Når du ringer til Opdatering (), skal du specificere, om du opdaterer hver forekomst af denne widget eller kun en bestemt forekomst. Hvis du vil opdatere hver forekomst, kan du bruge appWidgetIds, som er en matrix med ID'er, der identificerer alle forekomster på tværs af enheden.

I det følgende uddrag opdaterer jeg hver forekomst:

@Override public void onUpdate (Context context, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// Opdater alle forekomster af denne widget // updateAppWidget (context, appWidgetManager, appWidgetId); } super.onUpdate (kontekst, appWidgetManager, appWidgetIds); }

Bemærk, at denne onUpdate () -metode for øjeblikket ikke foretager nogen ændringer af widgetten for at hjælpe med at holde koden ligetil.

onEnabled: Udfører den første opsætning

Livscyklusmetoden onEnabled () kaldes som svar på ACTION_APPWIDGET_ENABLED, der sendes, når en forekomst af din widget føjes til startskærmen for først tid. Hvis brugeren opretter to forekomster af din widget, kaldes OnEnabled () til den første instans, men ikke for det andet.

Livscyklusmetoden onEnabled () er hvor du skal udføre en opsætning, der er påkrævet for alle forekomster af din widget, såsom at oprette den database, der vil fodre dine widgetoplysninger.

Jeg vil vise en skål, så du kan se nøjagtigt, hvornår denne livscyklusmetode kaldes:

@Override offentligt tomrum på Enabled (Kontekstkontekst) {Toast.makeText (kontekst, "onEnabled kaldet", Toast.LENGTH_LONG) .show (); }

Bemærk, at hvis brugeren sletter alle forekomster af din widget og derefter opretter en ny forekomst, klassificeres dette som den første forekomst, og onEnabled () livscyklusmetoden kaldes igen.

Oprydning med onDisabled

Metoden onDisabled () kaldes som svar på ACTION_APPWIDGET_DISABLED, som udløses, når brugeren sletter sidst forekomst af din widget.

Denne widget-livscyklusmetode er, hvor du skal rense alle ressourcer, du oprettede i metoden onEnabled (), for eksempel at slette den database, du oprettede i onEnabled ().

For at hjælpe med at holde vores kode ligetil, viser jeg simpelthen en skål hver gang denne metode udløses:

@Override offentligt tomrum onDisabled (kontekstkontekst) {Toast.makeText (kontekst, "onDisabled kaldet", Toast.LENGTH_LONG) .show (); }

Den udførte AppWidgetProvider

Din CollectionWidget-fil skal nu se sådan ud:

import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import androidx.annotation.NonNull; import android.content.Intent; import android.widget.RemoteViews; import android.widget.Toast; // Udvid fra AppWidgetProvider-klassen // offentlig klasse CollectionWidget udvider AppWidgetProvider {statisk void-opdateringAppWidget (kontekstkontekst, AppWidgetManager appWidgetManager, int appWidgetId) {// Indlæs layoutressurfilen til et RemoteViews-objekt // RemoteViews-visninger = ny RemoteViews-kontekst. getPackageName (), R.layout.list_widget); setRemoteAdapter (kontekst, visninger); // Informer AppWidgetManager om RemoteViews-objektet // appWidgetManager.updateAppWidget (appWidgetId, visninger); } @Override offentlig tomrum onUpdate (kontekstkontekst, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (kontekst, appWidgetManager, appWidgetId); } super.onUpdate (kontekst, appWidgetManager, appWidgetIds); } @Override offentligt tomrum på Enabled (Kontekstkontekst) {Toast.makeText (kontekst, "onEnabled kaldet", Toast.LENGTH_LONG) .show (); } @Override offentligt tomrum onDisabled (kontekstkontekst) {Toast.makeText (kontekst, "onDisabled kaldet", Toast.LENGTH_LONG) .show (); } privat statisk tomrum setRemoteAdapter (kontekstkontekst, @NonNull endelige RemoteViews-visninger) {views.setRemoteAdapter (R.id.widget_list, ny hensigt (kontekst, WidgetService.class)); }}

AppWidgetProviderInfo-filen

Din applikationswidget kræver også en AppWidgetProviderInfo-fil, der definerer flere vigtige egenskaber, herunder din widget's minimale dimensioner og hvor ofte den skal opdateres.

AppWidgetProviderInfo-filen gemmes i dit projekts res / xml-mappe.

Hvis dit projekt ikke allerede indeholder denne mappe, skal du oprette den:

  • Kontrol-klik på dit projekt res-mappe.
  • Vælg Ny> Android-ressurskatalog.
  • I det efterfølgende vindue skal du åbne rullemenuen Ressourcetype og vælge xml.
  • Katalognavnet skal opdateres til xml automatisk, men hvis det ikke gør det, skal du ændre det manuelt.
  • Klik på OK.

Opret derefter en collection_widget_info-fil, som vi bruger som vores AppWidgetProviderInfo:

  • Kontrol-klik på dit projekt xml-mappe.
  • Vælg Ny> XML-ressourcefil.
  • Navngiv denne fil collection_widget_info.
  • Klik på OK.

I vores AppWidgetProviderInfo-fil er vi nødt til at definere følgende egenskaber:

1. android: previewImage

Dette kan trækkes, der repræsenterer din applikationswidget i enhedens widgetvælger.

Hvis du ikke giver et previewImage, bruger Android i stedet din applikations ikon. For at opmuntre brugerne til at vælge din widget fra widgetvælgeren, skal du angive en tegnbar, der viser, hvordan din widget vil se ud, når den er korrekt konfigureret på brugerens hjemmeskærm.

Den nemmeste måde at oprette et eksempelbillede på er at bruge Widget Preview-applikationen, der er inkluderet i Android-emulatoren. Denne app giver dig mulighed for at konfigurere din widget og derefter generere et billede, som du derefter kan bruge i dit Android-projekt.

Vi opretter dette billede, når vi er færdig med at opbygge vores widget, så indtil videre bruger jeg den automatisk genererede mipmap / ic_launcher-ressource som et midlertidigt eksempelbillede.

2. android: widgetCategory

Applikations widgets skal placeres i en App Widget-vært, som normalt er den aktuel Android-hjemmeskærm, men kan også være en tredjepartsstarter, såsom Evie Launcher eller Nova Launcher.

Mellem API-niveauer 17 og 20 var det muligt at placere applikationswidgets på hjemmeskærmen eller låseskærmen, men understøttelse af låseskærm blev udskrevet i API-niveau 21.

Du kan angive, om din app-widget kan placeres på hjemmeskærmen, låseskærmen (som Android refererer til som "tastaturlåsen") eller begge dele ved hjælp af attributten Android: widgetCategory. Da det ikke er muligt at placere widgets på låseskærmen i de nyeste versioner af Android, målretter vi kun hjemmeskærmen.

For at bevare brugerens privatliv skal din widget ikke vise følsomme eller private oplysninger, når de er placeret på låseskærmen.

Hvis du giver brugerne mulighed for at placere din widget på låseskærmen, kunne enhver, der kigger på brugerens enhed, potentielt se din widget og alt dets indhold. For at hjælpe med at bevare brugerens privatliv skal din widget ikke vise nogen følsomme eller private oplysninger, når de er placeret på låseskærmen. Hvis din widget ikke indeholder personlige data, kan du overveje at give separat hjemmeskærm- og låseskærmlayout.

3. android: initialLayout

Dette er den layout-ressourcefil, som din widget skal bruge, når den er placeret på hjemmeskærmen, som til vores projekt er list_widget.xml.

4. android: resizeMode = ”vandret | lodret”

Attributten Android: resizeMode giver dig mulighed for at specificere, om din widget kan ændres størrelse vandret, lodret eller langs begge akser.

For at sikre, at din widget vises og fungerer korrekt på tværs af forskellige skærme, anbefales det, at du tillader at ændre størrelsen på din widget vandret og lodret, medmindre du har en bestemt grund til ikke at gøre det.

5. android: minHøjde og android: minBredde

Hvis din widget kan ændres til størrelse, skal du sikre dig, at brugeren ikke krymper din widget til det punkt, hvor den bliver ubrugelig. Du kan bruge attributterne minHøjde og minBredde til at definere den mindste, din app vil krympe, når den ændres af brugeren.

Disse værdier repræsenterer også din widget's oprindelige størrelse, så hvis din widget ikke kan ændres til størrelse, definerer minHøjde og minWidth widgetens permanente størrelse.

6. android: updatePeriodMillis

AppWidgetProviderInfo er også hvor du angiver, hvor ofte din widget skal anmode om nye oplysninger.

Det mindste understøttede opdateringsinterval er en gang hver 1800000 millisekunder (30 minutter). Selv hvis du erklærer et kortere opdateringsinterval, opdateres din widget stadig kun hver halve time.

Selvom du måske ønsker at vise de nyeste oplysninger så hurtigt som muligt, er systemet vilje vække en sovende enhed for at hente nye oplysninger. Hyppige opdateringer kan brænde gennem enhedens batteri, især i perioder, hvor enheden er uvirksom i en betydelig periode, f.eks. Natten over. At give den bedst mulige brugeroplevelse betyder at skabe en balance mellem at begrænse batteriforbruget og give nye oplysninger inden for en rimelig tidsramme.

Du skal også tage hensyn til den type indhold, din widget viser.

Du skal også tage hensyn til den slags indhold, som dine widgets til Android viser. For eksempel kan en vejrwidget muligvis kun hente en opdateret prognose en gang om dagen, mens en app, der viser nyheder, bliver nødt til at opdatere oftere.

For at finde denne perfekte balance skal du muligvis teste din widget på tværs af en række opdateringsfrekvenser og måle indvirkningen på batteriets levetid og aktualiteten af ​​din widgets indhold. Hvis du har en villig gruppe af testere, kan du endda konfigurere A / B-test for at se, om nogle opdateringsfrekvenser modtages mere positivt end andre.

Læste også: AndroidManifest.xml alt hvad du har brug for at vide

Endelig, når du har identificeret det perfekte opdateringsinterval, ønsker du måske at bruge et kortere interval, når du udvikler og tester din app. For eksempel kan du bruge den kortest mulige opdateringsfrekvens (android: updatePeriodMillis = ”1800000 ″), når du tester, at din app's onUpdate () -metode udløses korrekt, og derefter ændre denne værdi, før du frigiver din app til offentligheden.

Den udførte AppWidgetProviderInfo

Den færdige collection_widget_info.xml-fil skal se sådan ud:

Må ikke rod på brugerens hjemmeskærm!

For at sikre, at hjemmeskærmen aldrig ser rodet ud, vil vi tilføje noget polstring og margener til vores widget. Hvis dit projekt ikke allerede indeholder en dimension.xml-fil, skal du oprette en:

  • Kontrol-klik på dit projekts værdimappe.
  • Vælg Ny> Værdier ressourcefil.
  • Giv denne fil navnedimensionen.
  • Klik på OK.

Åbn din dimens.xml-fil, og definer følgende margin og polstringværdier:

10dp 8dp

Afsendelse af data til widgeten

Dernæst skal vi oprette en widgettjeneste, der er ansvarlig for at sende vores indsamlingsdata til widgeten.

Opret en ny Java-klasse (Ny> Java-klasse) med navnet WidgetService, og tilføj følgende:

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

Registrering af din widget i manifestet

Vi er nu nødt til at foretage nogle ændringer i vores projekts manifest.

Du starter ved at åbne manifestet og registrere din widget som en BroadcastReceiver. Vi er også nødt til at tilføje et intensionsfilter til handlingen android.appwidget.action.APPWIDGET_UPDATE:

Dernæst skal du specificere udbyderen af ​​appwidgets:

Endelig skal vi erklære den service, der sender data til vores widget, som i dette tilfælde er WidgetService-klassen. Denne service kræver android.permission.BIND_REMOTEVIEWS tilladelse:

Sæt din widget på prøve

Hvis du har fulgt denne vejledning, har du nu en komplet samling-widget, der viser et sæt data på brugerens hjemmeskærm.

Hvis dette var et virkeligt Android-projekt, ville du typisk udvide livscyklusmetoderne, især onUpdate () -metoden, men dette er alt, hvad vi har brug for for at oprette en widget, som du kan installere og teste på din Android-enhed:

  • Installer dette projekt på en kompatibel Android-smartphone, tablet eller AVD (Android Virtual Device).
  • Tryk længe på en tom del af hjemmeskærmen, og vælg Widgets, når du bliver bedt om det; dette lancerer widgetvælgeren.
  • Svej gennem widgetvælgeren, indtil du finder den applikationswidget, du lige har oprettet.
  • Tryk længe på denne widget for at føje den til din hjemmeskærm.
  • Da dette er den første forekomst af denne bestemte widget, skal metoden OnEnabled () køre, og du vil se en "onEnabled kaldet" toast.
  • Ændre størrelse på din widget. Hvis du indstiller en minimum understøttet størrelse, skal du kontrollere, at du ikke kan skrumpe widgeten forbi denne værdi.
  • Test, at ListView ruller som forventet.
  • Dernæst skal du kontrollere metoden OnDisabled () ved at slette din widget. Tryk langt på widget'en, og vælg derefter Fjern fra startskærmbilledet. Da dette er den sidste forekomst af denne bestemte widget, skal onDisabled () -metoden køre, og du vil se en "onDisabled kaldet" toast.

Dette er alt hvad du har brug for for at levere en fungerende Android-applikationswidget, men der er et par tilføjelser, der ofte kan forbedre brugeroplevelsen. I de følgende sektioner opfordrer vi brugere til at vælge denne widget fra widgetvælgeren ved at oprette et eksempelbillede, der viser widgetten bedst. Jeg viser dig også, hvordan du opretter en widget, der kan tilpasses fuldt ud, ved at føje en konfigurationsaktivitet til dit projekt.

Oprettelse af et eksempelbillede til Android-widget

Hvis du griber fat i din Android-enhed og stryger gennem widgetvælgeren, ser du, at hver widget er repræsenteret af et billede, som normalt viser, hvordan denne widget ser ud, når den er konfigureret på brugerens hjemmeskærm.

For at opmuntre brugerne til at vælge din widget, skal du give et eksempelbillede, der fremhæver alle de nyttige oplysninger og funktioner, som din widget har at tilbyde.

Du kan hurtigt og nemt oprette et eksempelbillede ved hjælp af applikationen Widget Preview, der er inkluderet i Android-emulatoren.

Bemærk, at widget-forhåndsvisning ikke er inkluderet i de nyeste Android-systembilleder, så du bliver nødt til at oprette en AVD ved hjælp af Nougat (API-niveau 25) eller tidligere:

  • Installer din applikation på en AVD, der kører API 25 eller lavere.
  • Åbn AVD's appskuffe, og start appen Widget Preview.
  • Widget-forhåndsvisning viser en liste over alle applikationer, der i øjeblikket er installeret på denne AVD; vælg din ansøgning fra listen.

  • Din widget vises nu på en tom baggrund. Brug lidt tid på at ændre størrelsen på og justere din widget, indtil den viser det bedste, som din widget har at tilbyde.
  • Når du er tilfreds med din widgets udseende og indhold, skal du vælge Tag snapshot.

  • Hvis du vil hente dit snapshot, skal du skifte tilbage til Android Studio og vælge Vis> Værktøj Windows> Enhedsfiludforsker fra værktøjslinjen. Dette lancerer Android Studios enhedsfil Explorer.
  • Naviger til sdcard / Download i Device File Explorer. Du skulle finde dit eksempelbillede gemt i følgende format: _ori_.png

  • Træk dette billede ud af Android Studio, og slip det et sted, der er let tilgængeligt, såsom dit skrivebord.
  • Giv denne billedfil et beskrivende navn.
  • Træk og slip filen til dit projekts mappe, der kan tegnes.
  • Åbn din AppWidgetProviderInfo, som for dette projekt er collection_widget_info.xml.
  • Find android: previewImage = ”@ mipmap / ic_launcher” linje, og opdater den for at henvise til dit eksempelbillede.

Din widget bruger nu denne nye billedressource som eksempelbillede:

  • Installer det opdaterede projekt på din fysiske Android-enhed eller AVD.
  • Tryk langt på ethvert tomt afsnit på hjemmeskærmen.
  • Tryk på Widgets, der starter widgetvælgeren.
  • Rul til din widget; det skal nu bruge det opdaterede eksempelbillede.

Tilpasbare widgets: Tilføjelse af en konfigurationsaktivitet

En konfigurationsaktivitet startes automatisk, når brugeren placerer hver forekomst af din widget på deres hjemmeskærm.

Der er flere grunde til, at du måske ønsker at tilføje en konfigurationsaktivitet til dit projekt.

widgets har en tendens til at give den bedste brugeroplevelse, når de giver adgang til de oplysninger eller funktioner, der er mest vigtige for den enkelte bruger.

For det første kræver nogle widgets førstegangsopsætning, f.eks. En widget, der viser trafikalarmer, kan være nødvendigt at kende brugerens hjemmeadresse, hvor de arbejder og de tidspunkter, hvor de typisk pendler. Uden nogen måde at indtaste disse oplysninger på, er din widget muligvis helt ubrugelig!

Derudover har widgets en tendens til at give den bedste brugeroplevelse, når de giver adgang til de oplysninger eller funktioner, der er mest vigtige for den enkelte bruger. Ved at tilføje en konfigurationsaktivitet til dit projekt kan du give brugerne frihed til at vælge og vælge Nemlig hvad der er inkluderet i din widget.

Selv relativt enkle tilpasninger, såsom at ændre en widget's baggrund eller skrifttype, kan have en positiv indflydelse på brugeroplevelsen - når alt kommer til alt er der ingen, der vil sætte pris på en widget, der visuelt kolliderer med resten af ​​deres hjemmeskærm!

Ingen vil sætte pris på en widget, der visuelt kolliderer med resten af ​​deres hjemmeskærm!

Alternativt kan du nogle gange have en lang liste over indhold, som du vil inkludere i din widget, og du kæmper for at indsnævre dine muligheder. En konfigurationsaktivitet kan være en måde at udnytte alle dine ideer til god brug uden skabe en rodet, forvirrende widget. Bare husk, at opsætning af en widget ikke bør føles som en opgave, så hvis du leverer en konfigurationsaktivitet, anbefales det, at du begrænser dig til tre konfigurationsindstillinger.

Lad os tilføje en konfigurationsaktivitet til vores projekt!

For det første har vores konfigurationsaktivitet brug for et layout, så opret en ny layout-ressourcefil med navnet config_activity.xml.

Jeg vil tilføje følgende knapper til dette layout:

  • En konfigurationsknap. I et projekt i det virkelige liv ændrer denne knap widget'en på en eller anden måde, for eksempel at tilføje eller fjerne indhold, eller ændre, hvor ofte widgetopdateringerne opdateres. For at hjælpe med at holde vores kode ligetil, vil du blot klikke på denne knap for at vise en skål med konfigurationsindstillinger.
  • En opsætningsknap. Når brugeren er tilfreds med, hvordan deres widget er konfigureret, vil det ved at trykke på denne knap placere den nykonfigurerede widget på deres hjemmeskærm.

Her er min udfyldte config_activity.xml fil:

Opret konfigurationsaktivitet

Nu skal vi oprette vores konfigurationsaktivitet.

For at starte skal du oprette en ny Java-klasse ved navn ConfigActivity. I denne aktivitet vil vi hente app-widget-ID'en fra den hensigt, der lancerede konfigurationsaktiviteten. Hvis denne hensigt ikke har en widget-id, bliver vi nødt til at kalde metoden finish ():

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

Dernæst skal vi oprette en returintention, videregive den originale appWidgetId og indstille resultaterne fra konfigurationsaktiviteten:

IntentresultatValue = nyt Hensigt (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); Afslut(); }}}

Hvis du leverer en konfigurationsaktivitet, sendes sendingen ACTION_APPWIDGET_UPDATE ikke automatisk, når konfigurationsaktiviteten startes, hvilket betyder metoden onUpdate () vil ikke kaldes, når brugeren opretter en forekomst af din widget.

Din konfigurationsaktivitet for at sikre, at din widget oprettes med ajourførte oplysninger og indhold skal udløse den første anmodning om opdatering ().

Her er den afsluttede ConfigActivity:

import android.app.Aktivitet; import android.appwidget.AppWidgetManager; import android.os.Bundle; import android.widget.Button; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; offentlig klasse ConfigActivity udvider aktivitet {@Override beskyttet tomrum onCreate (Bundle gemtInstanceState) {super.onCreate (gemtInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Button setupWidget = (Button) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (nyt OnClickListener () {@Override offentligt tomrum onClick (View v) {handleSetupWidget ();}}); Button configButton = (Button) findViewById (R.id.configButton); configButton.setOnClickListener (ny OnClickListener () {@Override offentligt tomrum onClick (View v) {handleConfigWidget ();}}); } privat tomrumshåndteringSetupWidget () {showAppWidget (); } privat tomrumshåndteringConfigWidget () {Toast.makeText (ConfigActivity.this, "Konfigurationsindstillinger", Toast.LENGTH_LONG) .show (); } int appWidgetId; private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Intent intention = getIntent (); Bundle ekstramateriale = intention.getExtras (); if (ekstramateriale! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // TO DO: Udfør konfigurationen // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); Afslut(); }}}

Når du har oprettet en konfigurationsaktivitet, skal du erklære denne aktivitet i manifestet og specificere, at den accepterer handlingen APPWIDGET_CONFIGURE:

Endelig, da der henvises til en konfigurationsaktivitet uden for pakkeomfanget, er vi nødt til at erklære denne aktivitet i vores AppWidgetProviderInfo, som i dette tilfælde er filen collection_widget_info.xml:

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

Test dit projekt

Nu er det tid til at sætte dit færdige projekt på prøve:

  • Installer dit opdaterede projekt på en fysisk Android-enhed eller AVD.
  • Slet alle tidligere forekomster af din widget for at sikre, at du arbejder med den allerbedste version.
  • Tryk længe på ethvert tomt område på hjemmeskærmen, og vælg Widgets, når du bliver bedt om det.
  • Find din widget i widgetvælgeren, og tryk længe på for at vælge den.
  • Slip widgetten på din hjemmeskærm. Konfigurationsaktiviteten skal starte automatisk.
  • Giv knappen Udfør nogle konfiguration et klik, og der skal vises en skål med konfigurationsindstillinger, der bekræfter, at denne interaktion er blevet registreret.
  • Forestil dig, at du har justeret widgetens indstillinger og nu er klar til at placere den på din hjemmeskærm; give knappen Opret widget-knappen et tryk, og denne widget skal oprettes med succes.

Du kan downloade det afsluttede samling-widget-projekt fra GitHub.

Afslutter

I denne artikel oprettede vi en widget, der kan rulles, der viser et datasæt på brugerens hjemmeskærm.

Hvis du vil fortsætte med at arbejde med dette projekt, kan du prøve at tilføje din egen kode til metoden onUpdate () for at oprette en widget, der opdateres med nye oplysninger i det interval, der er defineret i din AppWidgetProviderInfo-fil (collection_widget_info).

Hvis du opretter en Android-widget, skal du huske at dele dine kreationer i kommentarerne herunder!

I 2018 var den Kina-baerede telefonproducent ZTE på randen af ​​total ammenbrud. Fordi virkomheden blev tiltalt for overtrædele af alganktioner mod Iran, forbød den amerikanke regering ...

Du har ofte brug for at holde mere end en enhed kørt under kørlen. Betek Car Power Inverter giver dig mulighed for at oplade dem alle på én gang, og det kan du ogå par et par ...

Populær På Portalen