Lumikha ng isang Android Widget para sa Iyong App

May -Akda: Lewis Jackson
Petsa Ng Paglikha: 13 Mayo 2021
I -Update Ang Petsa: 1 Hulyo 2024
Anonim
How To Customize Your HOME SCREEN | APP ICONS + WIDGETS 💕
Video.: How To Customize Your HOME SCREEN | APP ICONS + WIDGETS 💕

Nilalaman


Dahil ang mga unang araw ng OS, ang mga widget para sa Android ay pinapayagan ang mga gumagamit na makisali sa kanilang mga paboritong apps, mula sa ginhawa ng kanilang homecreen. Kaya paano ka lumikha ng isang Android widget?

Para sa nag-develop, ang mga widget ay nagbibigay sa iyong application ng isang mahalagang pagkakaroon sa homecreen ng gumagamit. Sa halip na ma-tucked sa labas ng paningin sa drawer ng app, ipapaalala ang mga gumagamit tungkol sa iyong app bawat solong oras sumulyap sila sa kanilang homecreen - habang nakakakuha din ng isang preview ng pinaka-kawili-wili at kapaki-pakinabang na nilalaman ng iyong app.

Binibigyan ng mga Widget ang iyong application ng isang mahalagang pagkakaroon sa homecreen ng gumagamit

Sa artikulong ito, ipapakita ko sa iyo kung paano magbigay ng isang mas mahusay na karanasan ng gumagamit habang hinihikayat ang mga gumagamit na makisali sa iyong app, sa pamamagitan ng paglikha ng isang Android widget! Sa pagtatapos ng artikulong ito, lumikha ka ng isang mai-scroll na koleksyon ng widget na nagpapakita ng isang kumpletong data na itinakda sa homecreen ng gumagamit.


Upang matiyak na ikaw ay naghahatid ng uri ng widget na ginagamit ng mga gumagamit gusto upang ilagay sa kanilang homecreen, gagawa rin kami ng isang aktibidad na pagsasaayos, na magpapahintulot sa mga gumagamit na ipasadya ang nilalaman, hitsura at tampok ng widget. Sa wakas, ipapakita ko kung paano mo mahihikayat ang mga tao na gamitin ang iyong widget, sa pamamagitan ng paglikha ng isang imahe ng I-preview ang Widget na nagpapakita ng pinakamahusay na mag-alok ng iyong widget.

Basahin din: Pagbuo para sa mga natitiklop na aparato: Ano ang kailangan mong malaman

Ano ang mga widget para sa Android?

Ang isang application ng widget ay isang magaan, maliit na application na nakatira sa homecreen ng gumagamit.

Ang mga Widget para sa Android ay maaaring magbigay ng isang saklaw ng nilalaman, ngunit sa pangkalahatan ay nahuhulog sa isa sa mga sumusunod na kategorya:


  • Widget ng impormasyon. Ito ay isang hindi mai-scroll na widget na nagpapakita ng ilang impormasyon, tulad ng taya ng panahon ngayon o ang petsa at oras.
  • Mga widget ng koleksyon. Ito ay isang mai-scroll na widget na nagpapakita ng isang hanay ng mga kaugnay na data, na-format bilang isang ListView, GridView, StackView, o isang AdapterViewFlipper. Ang mga widget ng koleksyon ay karaniwang sinusuportahan ng isang mapagkukunan ng data, tulad ng isang database o isang Array.
  • Mga widget na kontrol. Ang mga widget na ito ay kumikilos bilang isang remote control na nagbibigay-daan sa mga gumagamit upang makipag-ugnay sa iyong aplikasyon, wala kinakailangang dalhin ito sa harapan. Ang mga app na naglalaro ng media, tulad ng mga podcast o musika, ay madalas na may mga control widget na nagpapahintulot sa gumagamit na ma-trigger ang Mga kilos ng Play, Pause, at Laktawan mula sa kanilang homecreen.
  • Mga Hybrid na mga widget. Minsan maaari kang makapaghatid ng isang mas mahusay na karanasan ng gumagamit sa pamamagitan ng pagsasama ng mga elemento mula sa maraming mga kategorya. Halimbawa, kung nagkakaroon ka ng isang control widget para sa isang application ng musika, maaari kang magbigay ng mga kontrol sa Play, Pause at Laktaw, ngunit maaari mo ring magpasya na magpakita ng ilang impormasyon, tulad ng pamagat at artist. Kung magpasya kang maghalo at tumugma, huwag kang madala! Ang mga Widget ay may posibilidad na maihatid ang pinakamahusay na karanasan ng gumagamit kapag nagbibigay sila ng madaling pag-access sa isang maliit na napapanahong, may-katuturang impormasyon o ilang mga karaniwang ginagamit na tampok. Upang makatulong na mapanatiling magaan ang iyong mga hybrid na widget, inirerekumenda na makilala mo ang pangunahing kategorya ng iyong widget, bubuo ito ayon sa kategoryang iyon, at pagkatapos magdagdag ng ilang mga elemento mula sa pangalawang kategorya ng widget.

Kailangan ba ng aking proyekto ng isang widget ng aplikasyon?

Mayroong maraming mga kadahilanan kung bakit dapat mong isaalang-alang ang pagdaragdag ng isang widget ng aplikasyon sa iyong Android proyekto.

Ang mga Widget para sa Android ay maaaring mapagbuti ang karanasan ng gumagamit

Bilang isang pangkalahatang tuntunin, ang mas kaunting mga hakbang sa pag-navigate na kinakailangan upang makumpleto ang isang gawain, mas mahusay ang karanasan ng gumagamit.

Sa pamamagitan ng pagbibigay ng isang widget ng aplikasyon, maaari mong alisin ang maraming mga hakbang sa pag-navigate mula sa mga karaniwang ginagamit na daloy ng iyong app. Sa pinakamahusay na sitwasyon ng kaso, ang iyong mga gumagamit ay makakakuha ng impormasyon na kailangan nila sa pamamagitan lamang ng pagsulyap sa kanilang homecreen, o isagawa ang nais na gawain sa pamamagitan lamang ng pag-tap sa isang pindutan sa iyong control widget.

Mas malakas kaysa sa mga shortcut sa aplikasyon

Ang mga widget ng App ay madalas na tumugon sa mga kaganapan sa onClick sa pamamagitan ng paglulunsad ng tuktok na antas sa nauugnay na application, katulad ng isang shortcut ng aplikasyon. Gayunpaman, ang mga widget ay maaari ring magbigay ng direktang pag-access sa mga tukoy na Aktibidad sa loob ng isang application, halimbawa, pag-tap sa Bagong Natanggap na abiso ng isang widget ay maaaring ilunsad ang nauugnay na app sa bago na nakabukas.

Sa pamamagitan ng pag-emlay ng maraming mga link sa layout ng iyong widget, maaari kang magbigay ng isang-tap na pag-access sa lahat ng pinakamahalagang Aktibidad ng iyong app, na aalisin ang higit pang mga hakbang sa pag-navigate mula sa iyong mga karaniwang daloy na ginagamit.

Sa pamamagitan ng pag-emote ng maraming mga link sa layout ng iyong widget, maaari kang magbigay ng isang-tap na pag-access sa lahat ng pinakamahalagang Aktibidad ng iyong app.

Tandaan na ang mga widget ay tumugon lamang sa mga kaganapan sa onClick, na pinipigilan ang mga gumagamit na hindi sinasadyang nakikipag-ugnay sa iyong widget habang sila ay nag-swipe sa paligid ng homescreen. Ang tanging pagbubukod ay kapag sinusubukan ng gumagamit na tanggalin ang iyong widget sa pamamagitan ng pag-drag ito patungo sa pagkilos ng kanilang homescreen, tulad ng sa sitwasyong ito ang iyong widget ay tutugon sa isang vertical na swipe ng swipe.

Ang pakikipag-ugnay na ito ay pinamamahalaan ng system ng Android, kaya hindi mo kailangang mag-alala tungkol sa mano-mano na pagpapatupad ng vertical swipe na suporta sa iyong widget.

Lumikha ng isang Android widget upang himukin ang pangmatagalang pakikipag-ugnay

Ang pagkumbinsi sa mga tao upang i-download ang iyong app ay ang unang hakbang lamang sa paglikha ng isang matagumpay na application ng Android. Ang mga pagkakataon ay, kung sunggaban mo ang iyong sariling Android smartphone o tablet at mag-swipe sa drawer ng app, pagkatapos ay matutuklasan mo ang maraming mga app na hindi mo ginagamit sa mga araw, linggo o potensyal kahit na mga buwan!

Basahin din:Pagsisimula sa Facebook para sa Android SDK

Kapag matagumpay na mai-install ang iyong app sa aparato ng gumagamit, kakailanganin mong magtrabaho nang husto upang mapanatili silang nakikibahagi at tinatangkilik ang iyong app. Ang pagkakaroon ng iyong app sa pagkakaroon ng homecreen ay maaaring maging isang malakas na tool upang matulungan ang pagmamaneho ng pangmatagalang pakikipag-ugnay, dahil ito ay isang palagiang paalala na umiiral ang iyong aplikasyon!

Ang isang mahusay na dinisenyo widget ay maaari ding magsilbi bilang isang patuloy na advert para sa iyong app. Sa tuwing ang gumagamit ay tumitingin sa kanilang homecreen, ang iyong widget ay may pagkakataon na aktibong hikayatin silang muling makisali sa iyong app, sa pamamagitan ng pagpapakita sa kanila ng lahat ng pinaka-kawili-wili at kapaki-pakinabang na nilalaman ng iyong app.

Lumilikha ng isang widget ng app ng koleksyon

Sa tutorial na ito, gagawa kami ng isang widget ng koleksyon na nagpapakita ng isang hanay bilang isang scrollable ListView.

Upang matulungan kang subaybayan ang lifecycle ng widget ng app, ang widget na ito ay mag-trigger din ng iba't ibang mga toast dahil lumilipat ito sa iba't ibang mga estado ng lifecycle. Sa pagtatapos ng tutorial na ito, idaragdag namin ang aming widget na may isang pasadyang imahe ng preview na ipapakita sa Widget Picker ng Android, at isang Aktibidad sa pagsasaayos, na magpapahintulot sa mga gumagamit na ipasadya ang widget bago ilagay ito sa kanilang homecreen.

Lumikha ng isang bagong proyekto sa Android kasama ang mga setting ng iyong napili, at magsimula!

Pagbuo ng layout ng iyong widget

Upang magsimula, tukuyin ang interface ng gumagamit (UI) ng widget.

Ang mga widget ng application ay ipinapakita sa isang proseso sa labas ang iyong aplikasyon, kaya maaari mo lamang gamitin ang mga layout at Mga Views na sinusuportahan ng mga RemoteViews.

Kapag binubuo ang iyong layout, pipigilan ka sa mga sumusunod:

  • AnalogClock
  • Button
  • Kronomiter
  • FrameLayout
  • GridLayout
  • Image Button
  • ImageView
  • LinearLayout
  • ProgressBar
  • RelativeLayout
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • ListView
  • StackView
  • ViewFlipper

Tandaan na ang mga subclass ng mga nasa itaas na klase at Mga Pananaw ay hindi suportado.

Lumikha ng isang bagong file ng mapagkukunan ng layout na pinangalanan list_widget.xml. Dahil ipapakita namin ang aming data gamit ang isang ListView, ang layout na ito ay pangunahing nagsisilbing isang lalagyan para sa isang elemento:

Pag-pop ng widget ng koleksyon

Susunod, kailangan nating lumikha ng isang data provider para sa aming ListView. Lumikha ng isang bagong klase ng Java na nagngangalang DataProvider.java at idagdag ang sumusunod:

mag-import ng android.content.Context; mag-import ng android.content.Intent; mag-import ng android.widget.RemoteViews; i-import ang android.widget.RemoteViewsService; pag-import ng java.util.ArrayList; pag-import ng java.util.List; i-import ang static na android.R.id.text1; i-import ang static na android.R.layout.simple_list_item_1; pampublikong klase DataProvider nagpapatupad RemoteViewsService.RemoteViewsFactory {List myListView = bagong ArrayList <> (); Konteksto mContext = null; pampublikong DataProvider (Konteksto ng konteksto, hangarin na hangarin) {mContext = konteksto; } @Override pampublikong walang bisa saCreate () {initData (); } @Override pampublikong walang bisa saDataSetChanged () {initData (); } @Override pampublikong walang bisa saDestroy () {} @Override public int getCount () {return myListView.size (); } @Override public RemoteViews getViewAt (int posisyon) {view ng RemoteViews = bagong RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (posisyon)); bumalik view; } @Override pampublikong RemoteViews getLoadingView () {return null; } @Override pampublikong int getViewTypeCount () {return 1; } @Override pampublikong mahaba getItemId (int posisyon) {return posisyon; } @Override pampublikong boolean hasStableIds () {bumalik na totoo; } pribadong walang bisa initData () {myListView.clear (); para sa (int i = 1; i <= 15; i ++) {myListView.add ("ListView item" + i); }}}

AppWidgetProvider: Pag-configure ng iyong widget

Upang lumikha ng isang Android widget, kailangan mong lumikha ng maraming mga file.

Ang aming unang file na tiyak na widget ay isang AppWidgetProvider, na kung saan ay isang BroadcastRecessor kung saan bibigyan mo ng kahulugan ang iba't ibang mga pamamaraan ng lifecycle ng widget, tulad ng pamamaraan na tinawag kapag nilikha ang iyong widget at ang pamamaraan na tinawag kapag ang widget na sa wakas ay tinanggal.

Lumikha ng isang bagong klase ng Java (File> Bago> Klase ng Java) na pinangalanang CollectionWidget.

Upang magsimula, ang lahat ng mga file ng provider ng widget ay dapat palawakin mula sa klase ng AppWidgetProvider. Pagkatapos ay kailangan nating i-load ang list_ file layout ng mapagkukunan ng lista_widget.xml sa isang bagay na RemoteViews, at ipaalam sa AppWidgetManager tungkol sa na-update na object ng RemoteViews:

pampublikong klase CollectionWidget ay nagpapalawak ng AppWidgetProvider {static void updateAppWidget (Konteksto ng konteksto, AppWidgetManager appWidgetManager, int appWidgetId) {// Instantiate the RemoteViews object // RemoteViews views = new RemoteViews (konteksto.getPackageName (), R.layout.list setRemoteAdapter (konteksto, mga tanawin); // Hilingin na i-update ng AppWidgetManager ang widget ng application // appWidgetManager.updateAppWidget (appWidgetId, mga tanawin); }

Lumikha ng adapter

Dahil ipinapakita namin ang aming data sa isang ListView, kailangan naming tukuyin ang isang pamamaraan ng setRemoteAdapter () sa aming AppWidgetProvider. Ang setRemoteAdapter () ay katumbas ng pagtawag sa AbsListView.setRemoteViewsAdapter () ngunit idinisenyo upang magamit sa mga widget ng application.

Sa pamamaraang ito, kailangan nating tukuyin ang id ng AdapterView (R.id.widget_list) at ang hangarin ng serbisyo na magbibigay sa kalaunan ng data sa aming RemoteViewsAdapter - bubuo tayo ng klase ng WidgetService na ito sa madaling panahon.

pribadong static na walang bisa setRemoteAdapter (Konteksto ng konteksto, @NonNull panghuling RemoteViews views) {views.setRemoteAdapter (R.id.widget_list, bagong layunin (konteksto, WidgetService.class)); }}

Ang pagtukoy ng mga pamamaraan ng lifecycle ng widget

Sa aming AppWidgetProvider, kailangan din nating tukuyin ang sumusunod na mga pamamaraan ng lifecycle ng widget:

Pagkuha ng bagong nilalaman na may onUpdate

Ang onUpdate () na pamamaraan ng lifecycle ng widget ay responsable para sa pag-update ng Mga Pananaw ng iyong widget sa bagong impormasyon.

Ang pamamaraang ito ay tinatawag sa bawat oras:

  • Gumagawa ang gumagamit ng isang aksyon na mano-mano ang nag-trigger ng onUpdate () na pamamaraan.
  • Ang tinukoy na agwat ng pag-update ng application ay lumipas.
  • Naglalagay ang gumagamit ng isang bagong halimbawa ng widget na ito sa kanilang homecreen.
  • Ang isang ACTION_APPWIDGET_RESTORED na layunin ng broadcast ay ipinadala sa AppWidgetProvider. Ang hangarin ng broadcast na ito ay na-trigger kung ang widget ay kailanman naibalik mula sa backup.

Narito rin kung saan mo irehistro ang anumang mga handler ng kaganapan na dapat gamitin ng iyong widget.

Kapag nag-update ng isang widget sa Android, mahalagang alalahanin na ang mga gumagamit ay maaaring lumikha ng maraming mga pagkakataon ng parehong widget. Halimbawa, marahil napapasadya ang iyong widget at nagpasya ang gumagamit na lumikha ng maraming mga "bersyon" na nagpapakita ng iba't ibang impormasyon, o nagbibigay ng pag-access sa natatanging pag-andar.

Kapag tumawag ka saUpdate (), kailangan mong tukuyin kung ina-update mo ang bawat pagkakataon ng widget na ito, o isang tiyak na halimbawa lamang. Kung nais mong i-update ang bawat pagkakataon, pagkatapos ay maaari mong gamitin ang appWidgetIds, na kung saan ay isang hanay ng mga ID na nagpapakilala sa bawat pagkakataon sa buong aparato.

Sa mga sumusunod na snippet, ina-update ko ang bawat pagkakataon:

@Override pampublikong walang bisa saUpdate (Konteksto ng konteksto, AppWidgetManager appWidgetManager, int appWidgetIds) {para (int appWidgetId) appWidgetIds) {// I-update ang lahat ng mga pagkakataon ng widget na ito // updateAppWidget (konteksto, appWidgetManager, appWidgetId); } super.onUpdate (konteksto, appWidgetManager, appWidgetIds); }

Tandaan na upang makatulong na mapanatili ang code nang diretso, ang pamamaraan na onUpdate () na ito ay hindi kasalukuyang gumagawa ng anumang mga pagbabago sa widget.

onEnabled: Ang pagsasagawa ng paunang pag-setup

Ang paraan ng onEnabled () lifecycle ay tinawag bilang tugon sa ACTION_APPWIDGET_ENABLED, na ipinadala kapag ang isang halimbawa ng iyong widget ay idinagdag sa homecreen para sa una oras. Kung ang gumagamit ay lumilikha ng dalawang mga pagkakataon ng iyong widget, pagkatapos ay onEnabled () ay tatawagin sa unang pagkakataon, ngunit hindi para sa pangalawa.

Ang onEnabled () lifecycle na pamamaraan ay kung saan dapat mong isagawa ang anumang pag-setup na kinakailangan para sa lahat ng mga pagkakataon ng iyong widget, tulad ng paglikha ng database na kakainin ang iyong impormasyon sa widget.

Magpapakita ako ng isang toast, upang makita mo nang eksakto kung kailan tinawag ang pamamaraang ito ng lifecycle:

@Override pampublikong walang bisa saEnabled (Konteksto ng konteksto) {Toast.makeText (konteksto, "onEnabled tinatawag na", Toast.LENGTH_LONG) .show (); }

Tandaan na kung tinatanggal ng gumagamit ang lahat ng mga pagkakataon ng iyong widget at pagkatapos ay lumilikha ng isang bagong pagkakataon, kung gayon ito ay naiuri sa unang pagkakataon, at ang onEnabled () lifecycle na paraan ay tatawagin muli.

Paglilinis, gamit ang onDisabled

Ang pamamaraan na onDisabled () ay tinawag bilang tugon sa ACTION_APPWIDGET_DISABLED, na na-trigger kapag tinatanggal ng gumagamit ang huling halimbawa ng iyong widget.

Ang pamamaraan ng lifecycle ng widget na ito ay kung saan dapat mong linisin ang anumang mga mapagkukunan na nilikha mo sa paraan na onEnabled (), halimbawa ng pagtanggal ng database na nilikha mo sa onEnabled ().

Upang makatulong na mapanatiling diretso ang aming code, magpapakita lang ako ng isang toast tuwing nai-trigger ang pamamaraang ito:

@Override pampublikong walang bisa saDisabled (Konteksto ng konteksto) {Toast.makeText (konteksto, "onDisabled tinatawag na", Toast.LENGTH_LONG) .show (); }

Ang nakumpleto na AppWidgetProvider

Ang iyong file ng CollectionWidget ay dapat na ngayon ay tumingin tulad ng:

i-import ang android.appwidget.AppWidgetManager; i-import ang android.appwidget.AppWidgetProvider; mag-import ng android.content.Context; i-import ang androidx.annotation.NonNull; mag-import ng android.content.Intent; mag-import ng android.widget.RemoteViews; mag-import ng android.widget.Toast; // Palawakin mula sa klase ng AppWidgetProvider // pampublikong klase ng KoleksyonWidget ay nagpapalawak ng AppWidgetProvider {static void updateAppWidget (Konteksto ng konteksto, AppWidgetManager appWidgetManager, int appWidgetId) {// I-load ang file ng mapagkukunan ng layout sa isang RemoteViews object // RemoteViews view (bagong konteksto. getPackageName (), R.layout.list_widget); setRemoteAdapter (konteksto, mga tanawin); // Ipagbigay-alam ang AppWidgetManager tungkol sa bagay na RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, mga tanawin); } @Override public void onUpdate (Konteksto ng konteksto, AppWidgetManager appWidgetManager, int appWidgetIds) {para sa (int appWidgetId: appWidgetIds) {updateAppWidget (konteksto, appWidgetManager, appWidgetId); } super.onUpdate (konteksto, appWidgetManager, appWidgetIds); } @Override pampublikong walang bisa saEnabled (Konteksto ng konteksto) {Toast.makeText (konteksto, "onEnabled tinatawag na", Toast.LENGTH_LONG) .show (); } @Override pampublikong walang bisa saDisabled (Konteksto ng konteksto) {Toast.makeText (konteksto, "onDisabled tinatawag na", Toast.LENGTH_LONG) .show (); } pribadong static na walang bisa setRemoteAdapter (Konteksto ng konteksto, @NonNull panghuling RemoteViews views) {views.setRemoteAdapter (R.id.widget_list, bagong layunin (konteksto, WidgetService.class)); }}

Ang file ng AppWidgetProviderInfo

Ang iyong application ng widget ay nangangailangan din ng isang file ng AppWidgetProviderInfo, na tumutukoy sa maraming mahahalagang katangian, kabilang ang mga minimum na sukat ng iyong widget at kung gaano kadalas dapat itong mai-update.

Ang file ng AppWidgetProviderInfo ay naka-imbak sa res / xml folder ng iyong proyekto.

Kung ang iyong proyekto ay hindi na naglalaman ng folder na ito, kakailanganin mong likhain ito:

  • Control-click ang folder ng iyong proyekto
  • Piliin ang Bago> Direktor ng Android mapagkukunan.
  • Sa kasunod na window, buksan ang pag-drop ng uri ng Resource, at piliin ang xml.
  • Dapat na awtomatikong i-update ang pangalan ng Directory sa xml, ngunit kung hindi ito kakailanganin mong baguhin ito nang manu-mano.
  • Mag-click sa OK.

Susunod, lumikha ng isang koleksyon_widget_info file, na gagamitin namin bilang aming AppWidgetProviderInfo:

  • Kontrol-click ang folder ng xml ng iyong proyekto.
  • Piliin ang Bago> file ng mapagkukunan ng XML.
  • Pangalanan ang file na koleksyon_widget_info.
  • Mag-click sa OK.

Sa aming file ng AppWidgetProviderInfo, kailangan naming tukuyin ang mga sumusunod na katangian:

1. android: previewImage

Ito ang mabubura na kumakatawan sa iyong application ng widget sa Widget Picker ng aparato.

Kung hindi ka nagbibigay ng previewImage, gagamitin ng Android ang icon ng iyong aplikasyon sa halip. Upang hikayatin ang mga gumagamit na piliin ang iyong widget mula sa Widget Picker, dapat kang magbigay ng isang drawable na nagpapakita kung paano titingnan ang iyong widget sa sandaling na-configure ito nang maayos sa homescreen ng gumagamit.

Ang pinakamadaling paraan upang lumikha ng isang imahe ng preview, ay ang paggamit ng application ng Widget Preview na kasama sa Android emulator. Hinahayaan ka ng app na ito na i-configure ang iyong widget at pagkatapos ay makabuo ng isang imahe, na maaari mong magamit sa iyong proyekto sa Android.

Nilikha namin ang imaheng ito sa sandaling natapos na namin ang pagbuo ng aming widget, kaya sa ngayon ay gumagamit ako ng awtomatikong nabuo na mapa ng mapa / ic_launcher bilang pansamantalang imaheng preview.

2. android: widgetCategory

Ang mga widget ng application ay dapat na mailagay sa loob ng isang App Widget Host, na kadalasan ay ang stock ng Android homescreen, ngunit maaari ding maging isang third party launcher tulad ng Evie launcher o Nova launcher.

Sa pagitan ng mga antas ng API 17 at 20, posible na maglagay ng mga widget ng application sa homecreen o ang lockscreen, ngunit ang suporta sa lockscreen ay tinanggal sa antas ng API 21.

Maaari mong tukuyin kung ang iyong widget ng app ay maaaring mailagay sa homescreen, ang lockscreen (na tinutukoy ng Android bilang "keyguard") o pareho, gamit ang android: widgetCategory na katangian. Dahil hindi posible na maglagay ng mga widget sa lockscreen sa pinakabagong mga bersyon ng Android, mai-target lamang namin ang homecreen.

Upang mapanatili ang privacy ng gumagamit, ang iyong widget ay hindi magpapakita ng anumang sensitibo o pribadong impormasyon kapag inilagay ito sa lockscreen.

Kung bibigyan ka ng mga pagpipilian ng mga gumagamit upang ilagay ang iyong widget sa lockscreen, kung gayon ang sinumang sumulyap sa aparato ng gumagamit ay maaaring makita ang iyong widget, at lahat ng nilalaman nito. Upang makatulong na mapanatili ang privacy ng gumagamit, ang iyong widget ay hindi magpapakita ng anumang sensitibo o pribadong impormasyon kapag inilagay ito sa lockscreen. Kung ang iyong widget ay naglalaman ng personal na data, maaaring gusto mong isaalang-alang ang pagbibigay ng hiwalay na mga layout ng homecreen at lockscreen.

3. android: initialLayout

Ito ang file na mapagkukunan ng layout na dapat gamitin ng iyong widget kapag inilagay ito sa homescreen, na para sa aming proyekto ay list_widget.xml.

4. android: resizeMode = "pahalang | patayo"

Ang android: ay nagbibigay-daan sa resizeMode katangian na tukuyin mo kung ang iyong widget ay maaaring baguhin ang laki nang pahalang, patayo, o kasama ang parehong mga axes.

Upang matiyak na tama ang iyong mga pagpapakita at pag-andar nang tama sa iba't ibang mga screen, inirerekumenda na pahintulutan kang baguhin ang iyong widget nang pahalang at patayo, maliban kung mayroon kang isang tukoy na dahilan na hindi.

5. android: minHeight at android: minWidth

Kung maaayos ang iyong widget, kailangan mong tiyakin na hindi pinaliitin ng gumagamit ang iyong widget sa puntong hindi ito magagamit. Maaari mong gamitin ang mga minHeight at minWidth na mga katangian upang tukuyin ang pinakamaliit na iyong app ay pag-urong kapag ito ay binago ng gumagamit.

Kinakatawan din ng mga halagang ito ang paunang sukat ng iyong widget, kaya kung ang iyong widget ay hindi ma-resisable pagkatapos minHeight at minWidth ay tukuyin ang permanenteng pagsukat ng widget.

6. android: updatePeriodMillis

Ang AppWidgetProviderInfo ay din kung saan mo tukuyin kung gaano kadalas dapat humiling ang iyong widget ng bagong impormasyon.

Ang pinakamaliit na sinusuportahan na agwat ng pag-update ay minsan bawat 1800000 milliseconds (30 minuto). Kahit na magpahayag ka ng isang mas maikling agwat ng pag-update, ang iyong widget ay maa-update lamang ang isang beses sa bawat kalahating oras.

Habang maaaring nais mong ipakita ang pinakabagong impormasyon nang mabilis hangga't maaari, ang system ay gumising ng isang natutulog na aparato upang makakuha ng bagong impormasyon. Ang mga madalas na pag-update ay maaaring sumunog sa pamamagitan ng baterya ng isang aparato, lalo na sa mga panahon kung saan ang aparato ay naiwan na walang ginagawa para sa isang makabuluhang tagal ng panahon, tulad ng magdamag. Ang pagbibigay ng pinakamahusay na posibleng karanasan ng gumagamit ay nangangahulugang kapansin-pansin ang isang balanse sa pagitan ng paglilimita sa pagkonsumo ng baterya, at pagbibigay ng bagong impormasyon sa loob ng isang makatwirang oras ng oras.

Dapat mo ring isaalang-alang ang uri ng nilalaman na ipapakita ng iyong widget.

Dapat mo ring isaalang-alang ang uri ng nilalaman na ipapakita ng iyong mga widget para sa Android. Halimbawa, ang isang widget ng panahon ay maaaring kailanganin lamang na makuha ang isang na-update na forecast nang isang beses sa bawat araw, samantalang ang isang app na nagpapakita ng paglabag ng balita ay kailangang mag-update nang mas madalas.

Upang mahanap ang perpektong balanse na ito, maaaring kailanganin mong subukan ang iyong widget sa isang hanay ng mga frequency ng pag-update at masukat ang epekto sa buhay ng baterya, at ang pagiging maagap ng nilalaman ng iyong widget. Kung mayroon kang isang kusang pangkat ng mga sumusubok, kung gayon maaari mo ring i-setup ang pagsubok ng A / B, upang makita kung ang ilang mga pag-update na mga frequency ay natanggap nang mas positibo kaysa sa iba.

Nabasa ni Aalso: AndroidManifest.xml lahat ng kailangan mong malaman

Sa wakas, sa sandaling nakilala mo ang perpektong agwat ng pag-update, maaaring gusto mong gumamit ng isang mas maikling agwat kapag binuo at pagsubok ang iyong app. Halimbawa, maaari mong gamitin ang pinakamaikling posibleng dalas ng pag-update (android: updatePeriodMillis = "1800000 ″) kapag sinusubukan mo na ang pamamaraan ng onUpdate () na paraan ng pag-trigger ng tama, at pagkatapos ay baguhin ang halagang ito bago ilabas ang iyong app sa pangkalahatang publiko.

Ang nakumpleto na AppWidgetProviderInfo

Ang natapos na koleksyon_widget_info.xml file ay dapat magmukhang ganito:

Huwag kalat ang homecreen ng gumagamit!

Upang matiyak na ang mga homecreen ay hindi kailanman mukhang kalat, magdagdag kami upang magdagdag ng ilang mga padding at margin sa aming widget. Kung ang iyong proyekto ay hindi na naglalaman ng isang dimens.xml file, kakailanganin mong lumikha ng isa:

  • Kontrol-click ang folder ng iyong mga proyekto.
  • Piliin ang Bago> Mga mapagkukunang file na mapagkukunan.
  • Bigyan ang file na ito ng dimensyon ng pangalan.
  • Mag-click sa OK.

Buksan ang iyong dimens.xml file at tukuyin ang sumusunod na mga margin at padding halaga:

10dp 8dp

Ang pagpapadala ng data sa widget

Susunod, kailangan naming lumikha ng isang serbisyo ng widget, na magiging responsable para sa pagpapadala ng aming data ng koleksyon sa widget.

Lumikha ng isang bagong klase ng Java (Bago> Java Class) na nagngangalang WidgetService, at idagdag ang sumusunod:

mag-import ng android.content.Intent; i-import ang android.widget.RemoteViewsService; pampublikong uri ng WidgetService ay nagpapalawak ng RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (layunin na layunin) {bumalik bagong DataProvider (ito, hangarin); }}

Ang pagrehistro ng iyong widget sa Manifest

Kailangan nating gumawa ng ilang mga pagbabago sa Manifest ng aming proyekto.

Upang magsimula, buksan ang Manifest at irehistro ang iyong widget bilang isang BroadcastRecessor. Kailangan din nating magdagdag ng isang intensyang filter para sa aksyon ng android.appwidget.action.APPWIDGET_UPDATE:

Susunod, kailangan mong tukuyin ang provider ng widget ng app:

Sa wakas, kailangan nating ipahayag ang serbisyo na magpapadala ng data sa aming widget, na sa pagkakataong ito ay ang klase ng WidgetService. Ang serbisyong ito ay nangangailangan ng pahintulot ng android.permission.BIND_REMOTEVIEWS:

Ilagay ang iyong widget sa pagsubok

Kung sumunod ka sa tutorial na ito, magkakaroon ka na ng kumpletong widget ng koleksyon na nagpapakita ng isang hanay ng data sa homecreen ng gumagamit.

Kung ito ay isang tunay na buhay na proyekto sa Android, karaniwang karaniwang palawakin mo ang mga pamamaraan ng lifecycle, lalo na ang onUpdate () na pamamaraan, ngunit ito lamang ang kailangan nating lumikha ng isang widget na maaari mong mai-install at subukan sa iyong Android device:

  • I-install ang proyektong ito sa isang katugmang Android smartphone, tablet o AVD (Android Virtual Device).
  • Pindutin nang matagal ang anumang walang laman na seksyon ng homecreen, at piliin ang Mga Widget kapag sinenyasan; inilulunsad nito ang Widget Picker.
  • Mag-swipe sa pamamagitan ng Widget Picker hanggang sa makita mo ang application ng widget na nilikha mo lang.
  • Long-pindutin ang widget na ito upang idagdag ito sa iyong homecreen.
  • Dahil ito ang unang halimbawa ng partikular na widget na ito, dapat na tumakbo ang onEnabled () na paraan, at makakakita ka ng "onEnabled na tinatawag na" toast.
  • Baguhin ang laki ng iyong widget. Kung nagtakda ka ng isang minimum na sinusuportahan na sukat, pagkatapos suriin na hindi mo maiiwasan ang widget na lumipas ang halagang ito.
  • Subukan na ang ListView scroll, tulad ng inaasahan.
  • Susunod, dapat mong suriin ang pamamaraan na onDisabled (), sa pamamagitan ng pagtanggal ng iyong widget. Pindutin nang matagal ang widget, at pagkatapos ay piliin ang Alisin mula sa Home screen. Dahil ito ang huling halimbawa ng partikular na widget na ito, dapat na tumakbo ang onDisabled () na pamamaraan, at makakakita ka ng "onDisabled na tinatawag na" toast.

Ito lamang ang kailangan mo upang maihatid ang isang gumaganang widget ng application ng Android, ngunit may ilang mga karagdagan na madalas na mapabuti ang karanasan ng gumagamit. Sa mga sumusunod na seksyon, hinihikayat namin ang mga gumagamit na piliin ang widget na ito mula sa Widget Picker, sa pamamagitan ng paglikha ng isang imahe ng preview na nagpapakita ng pinakamabuting kalagayan. Ipapakita ko rin sa iyo kung paano lumikha ng isang ganap na napapasadyang widget, sa pamamagitan ng pagdaragdag ng isang aktibidad na pagsasaayos sa iyong proyekto.

Lumilikha ng imahe ng preview ng Android widget

Kung kinuha mo ang iyong aparato sa Android at mag-swipe sa pamamagitan ng Widget Picker, makikita mo na ang bawat widget ay kinakatawan ng isang imahe, na kadalasang nagpapakita kung paano lilitaw ang widget na ito kapag na-configure ito sa homescreen ng gumagamit.

Upang hikayatin ang mga gumagamit na piliin ang iyong widget, dapat kang magbigay ng isang imahe ng preview na nagha-highlight sa lahat ng mga kapaki-pakinabang na impormasyon at mga tampok na inaalok ng iyong widget.

Maaari mong mabilis at madaling lumikha ng isang imahe ng preview, gamit ang application ng Widget Preview na kasama sa Android emulator.

Tandaan na ang Widget Preview ay hindi kasama sa pinakabagong mga imahe ng system ng Android, kaya kailangan mong lumikha ng isang AVD gamit ang Nougat (API Antas 25) o mas maaga:

  • I-install ang iyong aplikasyon sa isang AVD na tumatakbo sa API 25 o mas mababa.
  • Buksan ang drawer ng AVD app at ilunsad ang Widget Preview app.
  • Ang Widget Preview ay magpapakita ng isang listahan ng bawat application na kasalukuyang naka-install sa AVD na ito; piliin ang iyong aplikasyon mula sa listahan.

  • Ang iyong widget ay ipapakita sa isang blangko na background. Gumastos ng kaunting oras sa pag-resize at pag-tweet ng iyong widget hanggang sa pagpapakita ng pinakamainam na inaalok ng iyong widget.
  • Kapag nasiyahan ka sa hitsura at nilalaman ng iyong widget, piliin ang Take Snapshot.

  • Upang makuha ang iyong snapshot, bumalik sa Android Studio at piliin ang Tingnan ang> Tool Windows> Device File Explorer mula sa toolbar. Inilunsad nito ang Device File Explorer ng Android Studio.
  • Sa Device File Explorer, mag-navigate sa sdcard / Pag-download. Dapat mong makita ang nai-save na imahe ng iyong preview sa sumusunod na format: _ori_.png

  • I-drag ang imaheng ito sa labas ng Android Studio at i-drop ito sa isang lugar na madaling ma-access, tulad ng iyong Desktop.
  • Bigyan ang larawang ito ng isang naglalarawang pangalan.
  • I-drag at i-drop ang file sa drawable folder ng iyong proyekto.
  • Buksan ang iyong AppWidgetProviderInfo, na para sa proyektong ito ay koleksyon_widget_info.xml.
  • Hanapin ang android: previewImage = "@ mipmap / ic_launcher" na linya at i-update ito upang isangguni ang iyong imahe sa preview.

Gagamitin ngayon ng iyong widget ang bagong mapagkukunan ng imahe bilang imahe ng preview nito:

  • I-install ang na-update na proyekto sa iyong pisikal na aparato ng Android o AVD.
  • Pindutin nang matagal ang anumang walang laman na seksyon ng homecreen.
  • Tapikin ang Mga Widget, na naglulunsad ng Widget Picker.
  • Mag-scroll sa iyong widget; dapat na ngayong gamitin ang na-update na imahe ng preview.

Nako-customize na mga widget: Pagdaragdag ng isang aktibidad sa pagsasaayos

Ang isang pagsasaaktibo ng Aktibidad ay awtomatikong ilulunsad kapag inilalagay ng gumagamit ang bawat halimbawa ng iyong widget sa kanilang homecreen.

Mayroong maraming mga kadahilanan kung bakit nais mong magdagdag ng isang pagsasaayos ng Aktibidad sa iyong proyekto.

ang mga widget ay may posibilidad na magbigay ng pinakamahusay na karanasan ng gumagamit kapag nagbibigay sila ng pag-access sa impormasyon o mga tampok na pinakamahalaga sa indibidwal na gumagamit.

Una, ang ilang mga widget ay nangangailangan ng paunang pag-setup, halimbawa ang isang widget na nagpapakita ng mga alerto sa trapiko ay maaaring kailangang malaman ang address ng bahay ng gumagamit, kung saan sila nagtatrabaho, at sa mga oras na karaniwang pumupunta sila. Nang walang ilang paraan upang maipasok ang impormasyong ito, ang iyong widget ay maaaring maging ganap na walang silbi!

Bilang karagdagan, ang mga widget ay may posibilidad na magbigay ng pinakamahusay na karanasan sa gumagamit kapag nagbibigay sila ng pag-access sa impormasyon o mga tampok na pinakamahalaga sa indibidwal na gumagamit. Sa pamamagitan ng pagdaragdag ng isang aktibidad na pagsasaayos sa iyong proyekto, maaari mong bigyan ang kalayaan na pumili at pumili eksakto kung ano ang kasama sa iyong widget.

Kahit na ang mga diretso na pagpapasadya, tulad ng pagbabago ng background o font ng isang widget, ay maaaring magkaroon ng positibong epekto sa karanasan ng gumagamit - pagkatapos ng lahat, hindi mapapasasalamatan ng sinuman ang isang widget na biswal na nag-aaway sa natitirang bahagi ng kanilang homecreen!

Hindi mapapahalagahan ng sinuman ang isang widget na biswal na nag-aaway sa natitirang mga homecreen nila!

Bilang kahalili, kung minsan ay mayroon kang isang mahabang listahan ng nilalaman na nais mong isama sa iyong widget, at nahihirapan kang paliitin ang iyong mga pagpipilian. Ang isang aktibidad na pagsasaayos ay maaaring maging isang paraan upang magamit ang lahat ng iyong mga ideya, nang walang paglikha isang kalat, nakalilitong widget. Tandaan lamang na ang pag-set up ng isang widget ay hindi magiging tulad ng isang gawain, kaya kung nagbibigay ka ng isang pagsasaayos ng Aktibidad pagkatapos inirerekumenda na limitahan mo ang iyong sarili sa tatlong mga pagpipilian sa pagsasaayos.

Magdagdag ng isang pagsasaayos ng Aktibidad sa aming proyekto!

Una, ang aming aktibidad sa pagsasaayos ay nangangailangan ng isang layout, kaya lumikha ng isang bagong file ng mapagkukunan ng layout na pinangalanang config_activity.xml.

Dadagdagan ko ang mga sumusunod na pindutan sa layout na ito:

  • Isang pindutan ng pagsasaayos. Sa isang proyekto na tunay na buhay, ang pindutan na ito ay magbabago ng widget sa ilang paraan, halimbawa bilang pagdaragdag o pag-alis ng nilalaman, o pagbabago kung gaano kadalas ang pag-update ng widget. Upang makatulong na mapanatili ang aming code nang diretso, ang pag-click sa pindutan na ito ay magpapakita lamang ng toast na Mga Pagpipilian sa Pag-configure.
  • Isang pindutan ng pag-setup. Kapag nasiyahan ang gumagamit kung paano na-configure ang kanilang widget, ang pagpindot sa pindutan na ito ay ilalagay ang bagong naka-configure na widget sa kanilang homecreen.

Narito ang nakumpleto kong file na config_activity.xml:

Lumikha ng Aktibidad ng Pag-configure

Ngayon, kailangan nating lumikha ng aming aktibidad sa pagsasaayos.

Upang magsimula, lumikha ng isang bagong klase ng Java na nagngangalang ConfigActivity. Sa Aktibidad na ito, kukuha namin makuha ang App Widget ID mula sa hangarin na naglunsad ng Aktibidad ng pagsasaayos. Kung ang hangaring ito ay walang isang widget ID, kailangan nating tawagan ang tapusin () na pamamaraan:

Hangarin na layunin = getIntent (); Bundle extras = intensyon.getExtras (); kung (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); kung (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {tapusin (); }

Susunod, kailangan nating lumikha ng isang balak na bumalik, ipasa ang orihinal na appWidgetId at itakda ang mga resulta mula sa Aktibidad ng pagsasaayos:

Intent resultValue = bagong Intent (); resultaValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultaValue); tapusin (); }}}

Kung nagbibigay ka ng isang pagsasaayos ng Aktibidad, pagkatapos ang ACTION_APPWIDGET_UPDATE broadcast ay hindi maipadala awtomatiko kapag ang pag-configure ng Aktibidad ay inilulunsad, na nangangahulugang paraan na onUpdate () hindi tatawag kapag ang gumagamit ay lumilikha ng isang halimbawa ng iyong widget.

Upang matiyak na ang iyong widget ay nilikha gamit ang up-to-date na impormasyon at nilalaman, ang iyong aktibidad sa pagsasaayos dapat mag-trigger ng unang kahilingan saUpdate ().

Narito ang nakumpleto na ConfigActivity:

i-import ang android.app.Activity; i-import ang android.appwidget.AppWidgetManager; i-import ang android.os.Bundle; mag-import ng android.widget.Button; mag-import ng android.content.Intent; i-import ang android.view.View; i-import ang android.view.View.OnClickListener; mag-import ng android.widget.Toast; pampublikong klase ng ConfigActivity ay nagpapalawak ng Aktibidad {@Override protektado na walang bisa saCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Pag-setup ng pindutanWidget = (Button) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (bagong OnClickListener () {@Override pampublikong walang bisa saClick (Tingnan ang v) {handleSetupWidget ();}}); Button config Button = (Button) findViewById (R.id.configButton); configButton.setOnClickListener (bagong OnClickListener () {@Override pampublikong walang bisa saClick (View v) {handleConfigWidget ();}}); } pribadong walang laman na hawakanSetupWidget () {showAppWidget (); } pribadong walang laman na hawakanConfigWidget () {Toast.makeText (ConfigActivity.ito, "Mga pagpipilian sa Pag-configure", Toast.LENGTH_LONG) .show (); } int appWidgetId; pribadong walang bisa na showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Hangarin na layunin = getIntent (); Bundle extras = intensyon.getExtras (); kung (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); kung (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {tapusin (); } // GAWIN: Gawin ang pagsasaayos // Intent resultValue = new Intent (); resultaValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultaValue); tapusin (); }}}

Kapag nakagawa ka ng isang pagsasaayos ng Aktibidad, kailangan mong ideklara ang Aktibidad na ito sa Manifest at tukuyin na tinatanggap nito ang APPWIDGET_CONFIGURE na aksyon:

Sa wakas, dahil ang isang aktibidad ng pagsasaayos ay naitala sa labas ng saklaw ng pakete, kailangan nating ideklara ang Aktibidad na ito sa aming AppWidgetProviderInfo, na sa pagkakataong ito ay ang koleksyon_widget_info.xml file:

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

Pagsubok sa iyong proyekto

Ngayon na ang oras upang masubukan ang iyong natapos na proyekto:

  • I-install ang iyong na-update na proyekto sa isang pisikal na aparato ng Android o AVD.
  • Tanggalin ang lahat ng mga nakaraang pagkakataon ng iyong widget, upang matiyak na nagtatrabaho ka sa pinakabagong bersyon.
  • Pindutin nang matagal ang anumang walang laman na lugar ng homescreen at piliin ang Mga Widget kapag sinenyasan.
  • Hanapin ang iyong widget sa Widget Picker at long-press upang piliin ito.
  • I-drop ang widget papunta sa iyong homecreen. Ang Aktibidad ng Pag-configure ay dapat awtomatikong ilunsad.
  • Bigyan ang isang pindutan na Gawin ang Ilang Pag-configure ng isang pag-click, at dapat na lumitaw ang isang Opsyon ng Pag-configure ng tinapay, na nagpapatunay na matagumpay na nakarehistro ang pakikipag-ugnay na ito.
  • Isipin na na-tweet mo ang mga setting ng widget at handa na itong ilagay ito sa iyong homecreen; bigyan ang pindutang Lumikha ng Widget isang gripo, at ang widget na ito ay dapat matagumpay na malikha.

Maaari mong i-download ang nakumpletong proyekto ng koleksyon ng koleksyon mula sa GitHub.

Pagputol

Sa artikulong ito, gumawa kami ng isang mai-scroll na koleksyon ng koleksyon na nagpapakita ng isang set ng data sa homecreen ng gumagamit.

Kung nais mong magpatuloy sa pagtatrabaho sa proyektong ito, maaari mong subukang idagdag ang iyong sariling code sa pamamaraan na OnUpdate (), upang lumikha ng isang widget na nag-update ng bagong impormasyon sa agwat na tinukoy sa iyong file ng AppWidgetProviderInfo (collection_widget_info).

Kung gumawa ka ng isang Android widget, pagkatapos ay siguraduhin na ibahagi ang iyong mga likha sa mga komento sa ibaba!

1. Mag-click a kanan a iyong dektop. 2. Piliin Mga etting ng diplay Naa litahan.3. Mag-croll pababa a Pagluta. 4. Piliin ang reoluyon guto mo a pinalawak na menu....

Bawat taon, naglaba ang Google ng iang bagong beryon ng Android, ngunit hindi lahat ay nakakakuha kaagad. Kung hindi ka nagmamay-ari ng iang telepono ng Pixel, maaari kang maghintay hangga't iang ...

Tiyaking Basahin