Vytvořte pro svou aplikaci widget Android

Autor: Lewis Jackson
Datum Vytvoření: 13 Smět 2021
Datum Aktualizace: 1 Červenec 2024
Anonim
Create widgets for your android app | Android Studio Tutorial
Video: Create widgets for your android app | Android Studio Tutorial

Obsah


Od prvních dnů operačního systému umožnily widgety pro Android uživatelům interakci se svými oblíbenými aplikacemi z pohodlí úvodní obrazovky. Jak tedy vytvoříte widget pro Android?

Pro vývojáře poskytují widgety vaší aplikaci cennou přítomnost na domovské obrazovce uživatele. Namísto toho, aby byl v zásuvce aplikace zastrčen, budou uživatelé o vaší aplikaci upozorněni pokaždé podívají se na domovskou obrazovku - a zároveň získají náhled na nejzajímavější a nejužitečnější obsah vaší aplikace.

Widgety dodávají vaší aplikaci cennou přítomnost na domovské obrazovce uživatele

V tomto článku vám ukážu, jak poskytnout lepší uživatelský dojem a zároveň povzbudit uživatele, aby se zapojili do vaší aplikace, vytvořením widgetu pro Android! Na konci tohoto článku budete mít vytvořenou posuvnou kolekci sbírek, která zobrazuje kompletní sadu dat na domovské obrazovce uživatele.


Chcete-li se ujistit, že dodáváte druh widgetu, který uživatelé používají chtít umístit na domovskou obrazovku, vytvoříme také konfigurační aktivitu, která uživatelům umožní přizpůsobit obsah, vzhled a funkce widgetu. Nakonec ukážu, jak můžete povzbudit lidi, aby používali váš widget, vytvořením obrázku náhledu Widget, který zobrazuje to nejlepší, co může váš widget nabídnout.

Přečtěte si také: Vývoj pro skládací zařízení: Co potřebujete vědět

Co jsou widgety pro Android?

Miniaplikace aplikace je lehká miniaturní aplikace, která žije na domovské obrazovce uživatele.

Widgety pro Android mohou poskytovat celou řadu obsahu, ale obecně spadají do jedné z následujících kategorií:


  • Informační widget. Jedná se o widget, který nelze posouvat, a zobrazuje některé informace, například dnešní předpověď počasí nebo datum a čas.
  • Kolekce widgetů. Toto je posouvatelný widget, který zobrazuje sadu souvisejících dat, formátovaných jako ListView, GridView, StackView nebo AdapterViewFlipper. Widgety kolekce jsou obvykle podloženy zdrojem dat, jako je databáze nebo pole.
  • Ovládací widgety. Tyto widgety fungují jako dálkové ovládání, které uživatelům umožňuje interakci s vaší aplikací, bez musí to přivést do popředí. Aplikace, které přehrávají média, jako jsou podcasty nebo hudba, mají často ovládací ovládací prvky, které umožňují uživateli spouštět akce Play, Pause a Skip přímo z domovské obrazovky.
  • Hybridní widgety. Někdy můžete být schopni poskytnout lepší uživatelský dojem kombinací prvků z více kategorií. Pokud například vyvíjíte ovládací prvek widget pro hudební aplikaci, můžete poskytnout ovládací prvky Play, Pause a Skip, ale můžete se také rozhodnout zobrazit některé informace, například název skladby a interpreta. Pokud se rozhodnete smíchat a zápasovat, nenechte se unést! Widgety mají sklon poskytovat nejlepší uživatelský dojem, když poskytují snadný přístup k malému množství aktuálních, relevantních informací nebo několika běžně používaných funkcí. Chcete-li, aby byly vaše hybridní widgety lehké, doporučujeme vám identifikovat primární kategorii widgetu, rozvinout ji podle této kategorie a pak přidejte několik prvků ze sekundární kategorie widgetu.

Potřebuje můj projekt opravdu widget aplikace?

Existuje několik důvodů, proč byste měli zvážit přidání widgetu aplikace do svého projektu Android.

Widgety pro Android mohou zlepšit uživatelský dojem

Obecně platí, že čím méně navigačních kroků je potřeba k dokončení úkolu, tím lepší uživatelský dojem.

Poskytnutím widgetu aplikace můžete z nejčastěji používaných toků aplikace odebrat několik navigačních kroků. V nejlepším případě budou vaši uživatelé moci získat potřebné informace pouhým pohledem na domovskou obrazovku nebo provést požadovaný úkol jednoduše klepnutím na tlačítko v ovládacím ovládacím prvku.

Silnější než zkratky aplikací

Widgety aplikace často reagují na události onClick spuštěním nejvyšší úrovně v přidružené aplikaci, podobně jako zástupce aplikace. Widgety však mohou také poskytovat přímý přístup ke konkrétním činnostem v rámci aplikace, například klepnutím na oznámení o obdržení nového widgetu může spustit přidruženou aplikaci s novou již otevřenou.

Vložením více odkazů do rozvržení widgetu získáte přístup jedním klepnutím ke všem nejdůležitějším aktivitám aplikace a odstraníte tak ještě více navigačních kroků z nejčastěji používaných toků.

Vložením více odkazů do rozvržení widgetu získáte přístup jedním klepnutím ke všem nejdůležitějším aktivitám aplikace.

Uvědomte si, že widgety reagují pouze na události onClick, což zabraňuje uživatelům v nechtěné interakci s vaším widgetem při procházení po úvodní obrazovce. Jedinou výjimkou je, když se uživatel pokusí odstranit widget přetažením směrem k akci Odstranit na domovské obrazovce, protože v tomto scénáři bude váš widget reagovat na gesto svislého švihnutí.

Tuto interakci spravuje systém Android, takže se nemusíte starat o ruční implementaci podpory svislého švihnutí do widgetu.

Vytvořte widget Android pro dlouhodobé zapojení

Přesvědčit lidi, aby si stáhli vaši aplikaci, je pouze prvním krokem k vytvoření úspěšné aplikace pro Android. Je pravděpodobné, že pokud popadnete svůj vlastní chytrý telefon nebo tablet Android a přejdete skrz zásuvku aplikace, objevíte několik aplikací, které jste nepoužívali ve dnech, týdnech nebo potenciálně i měsících!

Přečtěte si také:Začínáme se sadou Facebook pro Android SDK

Až bude aplikace úspěšně nainstalována v uživatelském zařízení, budete muset tvrdě pracovat, abyste je udrželi v interakci a užívali si aplikace. Poskytnutí vaší přítomnosti na domovské obrazovce může být výkonným nástrojem, který pomůže dosáhnout dlouhodobého zapojení, jednoduše proto, že je to neustálé připomenutí, že vaše aplikace existuje!

Dobře navržený widget může také sloužit jako trvalý inzerát pro vaši aplikaci. Pokaždé, když se uživatel podívá na svou domovskou obrazovku, má váš widget příležitost aktivně je povzbudit, aby se znovu zapojili do vaší aplikace tím, že jim představí veškerý nejzajímavější a nejužitečnější obsah vaší aplikace.

Vytvoření widgetu aplikace kolekce

V tomto tutoriálu sestavíme widget widget, který zobrazí pole jako posouvatelné ListView.

Abychom vám pomohli sledovat životní cyklus widgetu aplikace, spustí tento widget také různé toasty, když se pohybuje v různých stavech životního cyklu. Na konci tohoto tutoriálu vylepšíme náš widget pomocí vlastního obrázku náhledu, který bude zobrazen v Android Widget Picker, a konfigurační aktivity, která uživatelům umožní přizpůsobit widget před umístěním na domovskou obrazovku.

Vytvořte nový projekt Android s nastavením podle vašeho výběru a začněme!

Vytváření rozložení widgetu

Nejprve si definujeme uživatelské rozhraní widgetu (UI).

Aplikační widgety se zobrazují v procesu mimo aplikace, takže můžete používat pouze rozvržení a pohledy, které jsou podporovány RemoteViews.

Při vytváření rozvržení se omezujete na následující:

  • AnalogClock
  • Tlačítko
  • Chronometr
  • FrameLayout
  • Rozvržení mřížky
  • ImageButton
  • ImageView
  • LinearLayout
  • Ukazatel průběhu
  • RelativeLayout
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • Zobrazení seznamu
  • StackView
  • ViewFlipper

Upozorňujeme, že podtřídy výše uvedených tříd a pohledů jsou ne podporováno.

Vytvořte nový soubor prostředků rozložení s názvem list_widget.xml. Protože budeme zobrazovat naše data pomocí ListView, toto rozložení slouží hlavně jako kontejner pro živel:

Vyplnění widgetu kolekce

Dále musíme vytvořit poskytovatele dat pro náš ListView. Vytvořte novou třídu Java s názvem DataProvider.java a přidejte následující:

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 statického android.R.id.text1; import statického android.R.layout.simple_list_item_1; veřejná třída DataProvider implementuje RemoteViewsService.RemoteViewsFactory {List myListView = new ArrayList <> (); Kontext mContext = null; public DataProvider (Kontextový kontext, Záměrový záměr) {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)); zpětný pohled; } @Override public RemoteViews getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @Override public long getItemId (int position) {return position; } @Override public boolean hasStableIds () {návrat true; } private void initData () {myListView.clear (); pro (int i = 1; i <= 15; i ++) {myListView.add ("položka ListView" + i); }}}

AppWidgetProvider: Konfigurace widgetu

Chcete-li vytvořit widget pro Android, musíte vytvořit několik souborů.

Náš první soubor specifický pro widget je AppWidgetProvider, což je BroadcastReceiver, kde definujete různé metody životního cyklu widgetu, jako je například metoda, která se nazývá při prvním vytvoření widgetu, a metoda, která se nazývá, když je tento widget nakonec odstraněn.

Vytvořte novou třídu Java (File> New> Java Class) s názvem CollectionWidget.

Chcete-li začít, musí se všechny soubory poskytovatele widgetů rozšířit ze třídy AppWidgetProvider. Potom musíme načíst soubor prostředků rozložení list_widget.xml do objektu RemoteViews a informovat AppWidgetManager o aktualizovaném objektu RemoteViews:

public class CollectionWidget rozšiřuje AppWidgetProvider {static void updateAppWidget (kontextový kontext, AppWidgetManager appWidgetManager, int appWidgetId) {// Okamžitý objekt RemoteViews // RemoteViews views = new RemoteViews (context.getPackageName (), R.layout.list_widget); setRemoteAdapter (kontext, pohledy); // Požádejte, aby AppWidgetManager aktualizoval widget aplikace // appWidgetManager.updateAppWidget (appWidgetId, zobrazení); }

Vytvořte adaptér

Protože naše data zobrazujeme v seznamu ListView, musíme v našem AppWidgetProvider definovat metodu setRemoteAdapter (). SetRemoteAdapter () je ekvivalentní volání AbsListView.setRemoteViewsAdapter (), ale je navržen pro použití v aplikačních widgetech.

V této metodě musíme definovat ID AdapterView (R.id.widget_list) a záměr služby, která nakonec poskytne data našemu RemoteViewsAdapter - tuto třídu WidgetService brzy vytvoříme.

soukromý statický void setRemoteAdapter (kontextový kontext, @NonNull finální zobrazení RemoteViews) {views.setRemoteAdapter (R.id.widget_list, nový záměr (kontext, WidgetService.class)); }}

Definování metod životního cyklu widgetu

V našem AppWidgetProvider musíme také definovat následující metody životního cyklu widgetu:

Načítání nového obsahu pomocí onUpdate

Metoda životního cyklu widgetu onUpdate () je zodpovědná za aktualizaci Zobrazení widgetu novými informacemi.

Tato metoda se nazývá pokaždé:

  • Uživatel provede akci, která ručně spustí metodu onUpdate ().
  • Uplynul interval aktualizace stanovený aplikací.
  • Uživatel umístí novou instanci tohoto widgetu na domovskou obrazovku.
  • Na AppWidgetProvider je odeslán ACTION_APPWIDGET_RESTORED záměr vysílání. Tento záměr vysílání se spustí, pokud je widget obnoven ze zálohy.

Zde také zaregistrujete obsluhy událostí, které by měl váš widget používat.

Při aktualizaci widgetu pro Android je důležité si uvědomit, že uživatelé mohou vytvořit více instancí stejného widgetu. Například váš widget je možné přizpůsobit a uživatel se rozhodne vytvořit několik „verzí“, které zobrazují různé informace, nebo poskytují přístup k jedinečným funkcím.

Když voláte onUpdate (), musíte určit, zda aktualizujete každou instanci tohoto widgetu nebo pouze konkrétní instanci. Pokud chcete aktualizovat každou instanci, můžete použít appWidgetIds, což je pole ID, které identifikují každou instanci v zařízení.

V následujícím úryvku aktualizuji každou instanci:

@Override public void onUpdate (Kontextový kontext, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// Aktualizujte všechny instance tohoto widgetu // updateAppWidget (kontext, appWidgetManager, appWidgetId); } super.onUpdate (kontext, appWidgetManager, appWidgetIds); }

Abychom udrželi kód přímý, tato metoda onUpdate () v widgetu v současné době neprovádí žádné změny.

onEnabled: Provádí počáteční nastavení

Metoda životního cyklu onEnabled () je volána v reakci na ACTION_APPWIDGET_ENABLED, která se odešle, když je na domovskou obrazovku pro domovskou obrazovku přidána instance widgetu První čas. Pokud uživatel vytvoří dvě instance vašeho widgetu, bude pro první instanci volán onEnabled (), ale ne za sekundu.

Metoda životního cyklu onEnabled () je místem, kde byste měli provést jakékoli nastavení, které je vyžadováno pro všechny instance widgetu, jako je například vytvoření databáze, která bude obsahovat informace o widgetech.

Budu zobrazovat přípitek, abyste mohli přesně vidět, kdy se tato metoda životního cyklu nazývá:

@Override public void onEnabled (Kontextový kontext) {Toast.makeText (kontext, "onEnabled nazvaný", Toast.LENGTH_LONG) .show (); }

Pokud uživatel odstraní všechny instance widgetu a vytvoří novou instanci, je to klasifikováno jako první instance a znovu se zavolá metoda životního cyklu onEnabled ().

Vyčištění pomocí funkce OnDisabled

Metoda onDisabled () se volá jako odpověď na ACTION_APPWIDGET_DISABLED, která se spustí, když uživatel odstraní poslední instance vašeho widgetu.

Tato metoda životního cyklu widgetu by měla vyčistit všechny prostředky, které jste vytvořili v metodě onEnabled (), například odstranění databáze, kterou jste vytvořili v onEnabled ().

Abychom udrželi náš kód přímočarý, při každém spuštění této metody jednoduše zobrazím přípitek:

@Override public void onDisabled (Kontextový kontext) {Toast.makeText (kontext, "onDisabled nazvaný", Toast.LENGTH_LONG) .show (); }

Dokončený AppWidgetProvider

Váš soubor CollectionWidget by nyní měl vypadat asi takto:

importovat android.appwidget.AppWidgetManager; importovat android.appwidget.AppWidgetProvider; import android.content.Context; import androidx.annotation.NonNull; import android.content.Intent; import android.widget.RemoteViews; importovat android.widget.Toast; // Rozšíření z třídy AppWidgetProvider // veřejná třída CollectionWidget rozšiřuje AppWidgetProvider {statický void updateAppWidget (kontextový kontext, AppWidgetManager appWidgetManager, int appWidgetId) {// Načtení souboru zdroje rozložení do objektu RemoteViews // Pohledy RemoteViews = nový RemoteViews (kontext). getPackageName (), R.layout.list_widget); setRemoteAdapter (kontext, pohledy); // Informovat AppWidgetManager o objektu RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, pohledy); } @Override public void onUpdate (Kontextový kontext, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (kontext, appWidgetManager, appWidgetId); } super.onUpdate (kontext, appWidgetManager, appWidgetIds); } @Override public void onEnabled (Kontextový kontext) {Toast.makeText (kontext, "onEnabled nazvaný", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (Kontextový kontext) {Toast.makeText (kontext, "onDisabled nazvaný", Toast.LENGTH_LONG) .show (); } soukromý statický void setRemoteAdapter (kontextový kontext, @NonNull finální zobrazení RemoteViews) {views.setRemoteAdapter (R.id.widget_list, nový záměr (kontext, WidgetService.class)); }}

Soubor AppWidgetProviderInfo

Widget aplikace vyžaduje také soubor AppWidgetProviderInfo, který definuje několik důležitých vlastností, včetně minimálních rozměrů widgetu a četnosti jeho aktualizace.

Soubor AppWidgetProviderInfo je uložen ve složce res / xml vašeho projektu.

Pokud váš projekt tuto složku již neobsahuje, musíte ji vytvořit:

  • Control-klikněte na složku res projektu.
  • Vyberte Nový> Adresář zdrojů Android.
  • V následujícím okně otevřete rozevírací nabídku Typ zdroje a vyberte xml.
  • Název adresáře by se měl automaticky aktualizovat na xml, ale pokud tomu tak není, musíte jej změnit ručně.
  • Klikněte na OK.

Dále vytvořte soubor collection_widget_info, který budeme používat jako náš AppWidgetProviderInfo:

  • Control-klikněte na složku xml vašeho projektu.
  • Vyberte Nový> Soubor prostředků XML.
  • Pojmenujte tento soubor collection_widget_info.
  • Klikněte na OK.

V našem souboru AppWidgetProviderInfo musíme definovat následující vlastnosti:

1. android: previewImage

Toto je kreslitelný obrázek, který představuje widget aplikace v nástroji Widget Picker.

Pokud neposkytnete náhled obrázku, Android místo toho použije ikonu vaší aplikace. Chcete-li povzbudit uživatele, aby si widget vybrali z nástroje Widget Picker, měli byste poskytnout kreslicí text, který ukazuje, jak bude widget vypadat, jakmile bude správně nakonfigurován na domovské obrazovce uživatele.

Nejjednodušší způsob, jak vytvořit náhledový obrázek, je použít aplikaci Widget Preview, která je součástí emulátoru Android. Tato aplikace vám umožní nakonfigurovat widget a poté vygenerovat obrázek, který pak můžete použít v projektu Android.

Jakmile dokončíme vytváření widgetu, vytvoříme tento obrázek, takže nyní budu jako dočasný náhled používat automaticky generovaný zdroj mipmap / ic_launcher.

2. android: widgetCategory

Widgety aplikací musí být umístěny uvnitř hostitele widgetů aplikací, což je obvykle standardní úvodní obrazovka Androidu, ale může to být také spouštěč třetích stran, jako je Evie Launcher nebo Nova Launcher.

Mezi úrovněmi API 17 a 20 bylo možné umístit widgety aplikací na domovskou obrazovku nebo lockscreen, ale podpora lockscreen byla v API level 21 zastaralá.

Pomocí atributu android: widgetCategory můžete určit, zda lze widget aplikace umístit na domovskou obrazovku, na obrazovku zámku (na kterou se systém Android odkazuje jako na „keyguard“) nebo na obě. Vzhledem k tomu, že není možné umísťovat widgety na zámkovou obrazovku v nejnovějších verzích systému Android, zacílíme pouze na úvodní obrazovku.

Aby byla zachována ochrana osobních údajů uživatele, neměl by váš widget při umístění na obrazovce zámku zobrazovat žádné citlivé ani soukromé informace.

Pokud uživatelům dáte možnost umístit svůj widget na uzamknutou obrazovku, kdokoli, kdo se podívá na zařízení uživatele, by mohl váš widget a veškerý jeho obsah vidět. Chcete-li zachovat soukromí uživatele, neměl by váš widget při umístění na obrazovku zámku zobrazovat žádné citlivé ani soukromé informace. Pokud váš widget obsahuje osobní údaje, můžete zvážit poskytnutí samostatných rozvržení domovské a zámkové obrazovky.

3. android: initialLayout

Toto je soubor prostředků rozložení, který by měl widget použít, když je umístěn na domovské obrazovce, což je pro náš projekt list_widget.xml.

4. android: resizeMode = ”horizontal | vertical”

Atribut android: resizeMode umožňuje určit, zda se dá widgetu změnit velikost vodorovně, svisle nebo podél obou os.

Chcete-li zajistit, aby se widget na různých obrazovkách správně zobrazoval a fungoval, doporučujeme vám povolit horizontální změnu velikosti widgetu a vertikálně, pokud nemáte konkrétní důvod.

5. android: minHeight a android: minWidth

Pokud je váš widget nastavitelný, musíte zajistit, aby uživatel zmenšil svůj widget do bodu, kdy se stane nepoužitelným. Atributy minHeight a minWidth můžete použít k definování nejmenší aplikace, kterou aplikace zmenší, když bude změněna její velikost uživatelem.

Tyto hodnoty také představují počáteční velikost widgetu, takže pokud widget nelze měnit, pak minHeight a minWidth definují trvalé rozměry widgetu.

6. android: updatePeriodMillis

AppWidgetProviderInfo je také místo, kde určíte, jak často by měl váš widget vyžadovat nové informace.

Nejmenší podporovaný interval aktualizace je jednou za 1800000 milisekund (30 minut). I když deklarujete kratší interval aktualizace, váš widget se bude aktualizovat pouze jednou za půl hodiny.

I když budete chtít zobrazit nejnovější informace co nejrychleji, systém vůle probudit spací zařízení za účelem získání nových informací. Časté aktualizace mohou hořet baterií zařízení, zejména v obdobích, kdy je zařízení ponecháno v klidu po dlouhou dobu, například přes noc. Zajištění nejlepší možné uživatelské zkušenosti znamená dosažení rovnováhy mezi omezením spotřeby baterie a poskytováním nových informací v přiměřeném časovém rámci.

Měli byste také vzít v úvahu druh obsahu, který se váš widget zobrazí.

Měli byste také vzít v úvahu druh obsahu, který se vaše widgety pro Android zobrazí. Například widget pro počasí může potřebovat načíst aktualizovanou předpověď pouze jednou denně, zatímco aplikace, která zobrazuje nejnovější zprávy, se bude muset aktualizovat častěji.

Chcete-li najít tuto dokonalou rovnováhu, možná budete muset vyzkoušet svůj widget napříč řadou aktualizačních frekvencí a změřit dopad na výdrž baterie a aktuálnost obsahu widgetu. Pokud máte ochotnou skupinu testerů, můžete dokonce nastavit testování A / B, abyste zjistili, zda jsou některé aktualizační frekvence přijímány pozitivněji než jiné.

Aalso také přečetl: AndroidManifest.xml vše, co potřebujete vědět

Jakmile určíte dokonalý interval aktualizace, možná budete chtít při vývoji a testování aplikace použít kratší interval. Můžete například použít nejkratší možnou frekvenci aktualizací (android: updatePeriodMillis = ”1800000 ″), když testujete, že metoda onUpdate () vaší aplikace funguje správně, a pak tuto hodnotu změňte před uvolněním aplikace široké veřejnosti.

Dokončený AppWidgetProviderInfo

Hotový soubor collection_widget_info.xml by měl vypadat asi takto:

Nezatěžujte domovskou obrazovku uživatele!

Aby domovská obrazovka nikdy nevypadala nepřehledně, přidáme k našemu widgetu nějaké výplně a okraje. Pokud váš projekt již neobsahuje soubor dimens.xml, musíte jej vytvořit:

  • Control-klikněte na složku hodnot vašeho projektu.
  • Vyberte Nový> Soubor prostředků hodnot.
  • Pojmenujte tento soubor.
  • Klikněte na OK.

Otevřete soubor dimens.xml a definujte následující hodnoty okrajů a výplní:

10dp 8dp

Odesílání dat do widgetu

Dále musíme vytvořit službu widgetu, která bude odpovědná za odesílání našich sbírkových dat do widgetu.

Vytvořte novou třídu Java (nová> Třída Java) s názvem WidgetService a přidejte následující:

import android.content.Intent; import android.widget.RemoteViewsService; public class WidgetService rozšiřuje RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (Intent záměr) {vrátit nový DataProvider (toto, záměr); }}

Registrace widgetu v manifestu

Nyní musíme provést některé změny manifestu našeho projektu.

Nejprve otevřete Manifest a zaregistrujte svůj widget jako BroadcastReceiver. Musíme také přidat filtr záměru pro akci android.appwidget.action.APPWIDGET_UPDATE:

Dále musíte zadat poskytovatele widgetu aplikace:

Nakonec musíme deklarovat službu, která bude odesílat data našemu widgetu, což je v tomto případě třída WidgetService. Tato služba vyžaduje oprávnění Android.permission.BIND_REMOTEVIEWS:

Vyzkoušejte svůj widget

Pokud jste spolu s tímto tutoriálem následovali, budete mít nyní k dispozici kompletní widget kolekce, který zobrazuje sadu dat na domovské obrazovce uživatele.

Pokud se jednalo o skutečný projekt Android, obvykle byste rozbalili metody životního cyklu, zejména metodu onUpdate (), ale to je vše, co musíme vytvořit widget, který můžete nainstalovat a otestovat na svém zařízení Android:

  • Nainstalujte tento projekt do kompatibilního smartphonu Android, tabletu nebo AVD (Android Virtual Device).
  • Dlouho stiskněte libovolnou prázdnou část úvodní obrazovky a po zobrazení výzvy vyberte Widgety; tím se spustí Widget Picker.
  • Procházejte výběrem widgetů, dokud nenajdete právě vytvořený widget aplikace.
  • Dlouhým stisknutím tohoto widgetu jej přidáte na plochu.
  • Protože se jedná o první instanci tohoto konkrétního widgetu, měla by se spustit metoda onEnabled () a uvidíte přípitek „onEnabled nazvaný“.
  • Změňte velikost widgetu. Pokud nastavíte minimální podporovanou velikost, zkontrolujte, zda nelze miniaplikaci zmenšit za tuto hodnotu.
  • Otestujte, zda ListView posouvá podle očekávání.
  • Dále byste měli zkontrolovat metodu onDisabled () odstraněním widgetu. Dlouho stiskněte widget a poté vyberte Odstranit z plochy. Protože se jedná o poslední instanci tohoto konkrétního widgetu, měla by se spustit metoda onDisabled () a uvidíte přípitek „onDisabled nazvaný“.

To je vše, co potřebujete k dodání funkčního widgetu pro Android, ale existuje několik dodatků, které mohou často zlepšit uživatelský dojem. V následujících sekcích vyzýváme uživatele, aby si vybrali tento widget z nástroje Widget Picker vytvořením obrázku náhledu, který zobrazuje widget v nejlepším případě. Ukážu vám také, jak vytvořit plně přizpůsobitelný widget přidáním konfigurační aktivity do projektu.

Vytvoření náhledu obrázku widgetu Android

Pokud uchopíte zařízení Android a přejdete prstem po výběru widgetu, uvidíte, že každý widget je představován obrázkem, který obvykle ukazuje, jak bude tento widget vypadat, jakmile bude nakonfigurován na domovské obrazovce uživatele.

Chcete-li povzbudit uživatele k výběru widgetu, měli byste poskytnout náhledový obrázek, který vyzdvihuje všechny užitečné informace a funkce, které váš widget nabízí.

Můžete rychle a snadno vytvořit náhledový obrázek pomocí aplikace Widget Preview, která je součástí emulátoru Android.

Náhled Widgetu není součástí nejnovějších obrazů systému Android, takže budete muset vytvořit AVD pomocí Nougat (API Level 25) nebo starší:

  • Nainstalujte si aplikaci na AVD s rozhraním API 25 nebo nižším.
  • Otevřete zásuvku aplikace AVD a spusťte aplikaci Widget Preview.
  • Náhled Widgetu zobrazí seznam všech aplikací, které jsou aktuálně nainstalovány na tomto AVD; vyberte aplikaci ze seznamu.

  • Widget se nyní zobrazí na prázdném pozadí. Strávte nějaký čas změnou velikosti a vyladěním widgetu, dokud se nezobrazí to nejlepší, co váš widget nabízí.
  • Až budete spokojeni se vzhledem a obsahem widgetu, vyberte možnost Pořídit snímek.

  • Chcete-li získat snímek, přepněte zpět do Android Studio a na panelu nástrojů vyberte Zobrazení> Nástroje Windows> Průzkumník souborů zařízení. Tím se spustí Průzkumník souborů zařízení Android Studio.
  • V Průzkumníku souborů zařízení přejděte na sdcard / Download. Měli byste najít svůj náhledový obrázek uložený v následujícím formátu: _ori_.png

  • Přetáhněte tento obrázek ze služby Android Studio a přetáhněte jej někam snadno přístupným, například na plochu.
  • Dejte tomuto obrazovému souboru popisný název.
  • Přetáhněte soubor do složky, kterou lze v projektu kreslit.
  • Otevřete svůj AppWidgetProviderInfo, což je pro tento projekt collection_widget_info.xml.
  • Najděte řádek Android: previewImage = ”@ mipmap / ic_launcher” a aktualizujte jej, aby odkazoval na náhledový obrázek.

Váš widget nyní použije tento nový obrazový prostředek jako svůj náhledový obrázek:

  • Nainstalujte aktualizovaný projekt na své fyzické zařízení Android nebo AVD.
  • Dlouho stiskněte libovolnou prázdnou část úvodní obrazovky.
  • Klepněte na Widgety, čímž se spustí Widget Picker.
  • Přejděte na svůj widget; nyní by měl používat aktualizovaný obrázek náhledu.

Přizpůsobitelné widgety: Přidání konfigurační aktivity

Aktivita konfigurace se spustí automaticky, když uživatel umístí každou instanci widgetu na domovskou obrazovku.

Existuje několik důvodů, proč byste mohli do projektu přidat konfigurační aktivitu.

widgety mají tendenci poskytovat nejlepší uživatelský dojem, když poskytují přístup k informacím nebo funkcím, které jsou pro jednotlivého uživatele nejdůležitější.

Za prvé, některé widgety vyžadují počáteční nastavení, například widget, který zobrazuje dopravní upozornění, může potřebovat znát domovskou adresu uživatele, kde pracuje, a časy, kdy obvykle dojíždějí. Bez nějakého způsobu, jak zadat tyto informace, může být váš widget zcela k ničemu!

Widgety navíc poskytují nejlepší uživatelský dojem, když poskytují přístup k informacím nebo funkcím, které jsou pro jednotlivého uživatele nejdůležitější. Přidáním konfigurační aktivity do projektu můžete uživatelům poskytnout svobodu výběru a výběru přesně co je součástí vašeho widgetu.

Dokonce i relativně jednoduché úpravy, jako je změna pozadí nebo písma widgetu, mohou mít pozitivní vliv na uživatelský zážitek - koneckonců nikdo nebude oceňovat widget, který se vizuálně střetává se zbytkem domovské obrazovky!

Nikdo nebude ocenit widget, který se vizuálně střetne se zbytkem jejich domovské obrazovky!

Případně můžete mít dlouhý seznam obsahu, který chcete do widgetu zahrnout, a vy se snažíte své možnosti zúžit. Konfigurační aktivita může být způsob, jak dobře využít všechny vaše nápady vytváření zaplněný, matoucí widget. Nezapomeňte, že nastavení widgetu by se nemělo cítit jako fuška, takže pokud zadáte konfigurační aktivitu, doporučuje se omezit se na tři možnosti konfigurace.

Přidejme do našeho projektu konfigurační aktivitu!

Za prvé, naše konfigurační aktivita potřebuje rozvržení, takže vytvořte nový soubor prostředků rozvržení s názvem config_activity.xml.

K tomuto rozvržení přidám následující tlačítka:

  • Konfigurační tlačítko. V projektu skutečného života by toto tlačítko nějakým způsobem modifikovalo widget, například přidání nebo odebrání obsahu, nebo změnu frekvence aktualizace widgetu. Abychom udrželi náš kód přímý, kliknutím na toto tlačítko se jednoduše zobrazí přípitek konfiguračních možností.
  • Tlačítko nastavení. Jakmile je uživatel spokojený s konfigurací svého widgetu, stisknutím tohoto tlačítka umístíte nově nakonfigurovaný widget na domovskou obrazovku.

Zde je můj dokončený soubor config_activity.xml:

Vytvořte konfigurační aktivitu

Nyní musíme vytvořit naši konfigurační aktivitu.

Nejprve vytvořte novou třídu Java nazvanou ConfigActivity. V této aktivitě se chystáme načíst ID widgetu aplikace z záměru, který spustil konfigurační aktivitu. Pokud tento záměr nemá ID widgetu, musíme zavolat metodu finish ():

Záměr = getIntent (); Balíčkové doplňky = záměr.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }

Dále musíme vytvořit záměr návratu, předat původní aplikaci appWidgetId a nastavit výsledky z konfigurační aktivity:

Záměr resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); Dokončit(); }}}

Pokud zadáte konfigurační aktivitu, nebude vysílání ACTION_APPWIDGET_UPDATE automaticky odesláno při spuštění konfigurační aktivity, což znamená metodu onUpdate () zvyklý být vyvolán, když uživatel vytvoří instanci vašeho widgetu.

Chcete-li zajistit, aby byl váš widget vytvořen s aktuálními informacemi a obsahem, vaše konfigurační aktivita musí spusťte první požadavek onUpdate ().

Zde je kompletní ConfigActivity:

import android.app.Activity; importovat android.appwidget.AppWidgetManager; import android.os.Bundle; import android.widget.Button; import android.content.Intent; import android.view.View; importovat android.view.View.OnClickListener; importovat android.widget.Toast; veřejná třída ConfigActivity rozšiřuje aktivitu {@Override chráněné void onCreate (Bundle uloženéInstanceState) {super.onCreate (uloženéInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Button setupWidget = (Button) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (nový OnClickListener () {@Override public void onClick (Zobrazit v) {handleSetupWidget ();}}); Button configButton = (Button) findViewById (R.id.configButton); configButton.setOnClickListener (nový OnClickListener () {@Override public void onClick (Zobrazit v) {handleConfigWidget ();}}); } private void handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Možnosti konfigurace", Toast.LENGTH_LONG) .show (); } int appWidgetId; private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Záměr = getIntent (); Balíčkové doplňky = záměr.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // TO TO: Proveďte konfiguraci // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); Dokončit(); }}}

Jakmile vytvoříte konfigurační aktivitu, musíte tuto aktivitu deklarovat v manifestu a určit, že přijímá akci APPWIDGET_CONFIGURE:

Konečně, protože je konfigurační aktivita odkazována mimo rozsah balíčku, musíme tuto aktivitu deklarovat v našem AppWidgetProviderInfo, což je v tomto případě soubor collection_widget_info.xml:

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

Testování vašeho projektu

Nyní je čas dát svůj hotový projekt na zkoušku:

  • Nainstalujte aktualizovaný projekt na fyzické zařízení Android nebo AVD.
  • Odstraňte všechny předchozí instance widgetu, abyste zajistili, že pracujete s nejnovější verzí.
  • Dlouho stiskněte libovolnou prázdnou oblast úvodní obrazovky a po zobrazení výzvy vyberte Widgety.
  • Najděte svůj widget v nástroji Widget Picker a dlouhým stisknutím jej vyberte.
  • Přetáhněte widget na plochu. Konfigurační aktivita by se měla spustit automaticky.
  • Klikněte na tlačítko Provést nějakou konfiguraci a měla by se zobrazit přípitek konfigurace, což potvrzuje, že tato interakce byla úspěšně zaregistrována.
  • Představte si, že jste vylepšili nastavení widgetu a jste připraveni umístit jej na domovskou obrazovku; udělejte klepnutí na tlačítko Vytvořit widget a tento widget by měl být vytvořen úspěšně.

Dokončený projekt widgetů kolekce si můžete stáhnout z GitHubu.

Zabalení

V tomto článku jsme vytvořili posouvatelný widget kolekce, který zobrazuje sadu dat na domovské obrazovce uživatele.

Pokud chcete pokračovat v práci s tímto projektem, můžete zkusit přidat vlastní kód do metody onUpdate () a vytvořit widget, který aktualizuje nové informace v intervalu definovaném v souboru AppWidgetProviderInfo (collection_widget_info).

Pokud vytvoříte widget Android, nezapomeňte své výtvory sdílet v komentářích níže!

Každý den e objevují nové televizní a filmové lužby. Přeto je bezplatné a legální vyílání tále vzácnotí - natolik, že e zdá b...

Výkonný pracovník polečnoti ony údajně řekl, že nyní lidé chtějí chytré telefony většími obrazovkami.Komentář naznačuje, že ony by mohla oputit nebo ...

Populární