Sukurkite „Android“ valdiklį savo programai

Autorius: Lewis Jackson
Kūrybos Data: 13 Gegužė 2021
Atnaujinimo Data: 1 Liepos Mėn 2024
Anonim
Create widgets for your android app | Android Studio Tutorial
Video.: Create widgets for your android app | Android Studio Tutorial

Turinys


Nuo pat pirmųjų OS dienų „Android“ valdikliai vartotojams leido patogiai naudotis pagrindiniu ekranu ir naudotis savo mėgstamiausiomis programomis. Taigi, kaip sukurti „Android“ valdiklį?

Programuotojui valdikliai suteikia jūsų programai vertingą buvimą vartotojo pagrindiniame ekrane. Vietoj to, kad būtų pašalintas iš akių programų stalčiuje, vartotojams bus priminta apie jūsų programą kiekvieną kartą jie žvelgia į pagrindinį ekraną, kartu peržiūrėdami įdomiausią ir naudingiausią jūsų programos turinį.

Valdikliai suteikia jūsų programai vertingą vaizdą pagrindiniame vartotojo ekrane

Šiame straipsnyje aš jums parodysiu, kaip sukurti geresnę vartotojo patirtį, skatinant vartotojus domėtis jūsų programa, sukuriant „Android“ valdiklį! Pasibaigus šiam straipsniui, jūs sukursite slenkamą kolekcijos valdiklį, kuris naudotojo pagrindiniame ekrane rodys visą duomenų rinkinį.

Norėdami užtikrinti, kad pateikiate tokį valdiklį, kokį naudoja vartotojai nori norėdami patalpinti į pagrindinį ekraną, mes taip pat sukursime konfigūravimo veiklą, kuri leis vartotojams tinkinti valdiklio turinį, išvaizdą ir funkcijas. Galiausiai parodysiu, kaip galite paskatinti žmones naudotis jūsų valdikliu sukurdami valdiklio peržiūros vaizdą, kuriame pateikiamos geriausios galimybės, kurias jūsų valdiklis gali pasiūlyti.


Taip pat skaitykite: Kuriama sulankstomiems įrenginiams: Ką reikia žinoti

Kas yra „Android“ valdikliai?

Programos valdiklis yra lengva, miniatiūrinė programa, naudojama vartotojo pagrindiniame ekrane.

„Android“ valdikliai gali pateikti įvairų turinį, tačiau paprastai jie skirstomi į vieną iš šių kategorijų:

  • Informacijos valdiklis. Tai neslenkamas valdiklis, kuriame rodoma tam tikra informacija, pavyzdžiui, šiandienos orų prognozė arba data ir laikas.
  • Kolekcijos raštai. Tai slenkamas valdiklis, kuriame pateikiamas susijusių duomenų rinkinys, suformatuotas kaip „ListView“, „GridView“, „StackView“ arba „AdapterViewFlipper“. Kolekcijos valdiklius paprastai palaiko duomenų šaltinis, pavyzdžiui, duomenų bazė ar masyvas.
  • Valdymo valdikliai. Šie valdikliai veikia kaip nuotolinio valdymo pultas, leidžiantis vartotojams sąveikauti su jūsų programa, be turėdamas ją iškelti į priekį. Programos, kurios atkuria laikmenas, pvz., Transliacijas ar muziką, dažnai turi valdiklius, leidžiančius vartotojui suaktyvinti „Play“, „Pause“ ir „Skip“ veiksmus tiesiai iš pagrindinio ekrano.
  • Hibridiniai valdikliai. Kartais gali būti naudingesnė vartotojo patirtis derinant elementus iš kelių kategorijų. Pvz., Jei kuriate muzikos programos valdymo valdiklį, galite pateikti „Play“, „Pause“ ir „Pereiti“ valdiklius, tačiau taip pat galite nuspręsti parodyti tam tikrą informaciją, pavyzdžiui, dainos pavadinimą ir atlikėją. Jei nuspręsite sumaišyti ir suderinti, tada nesinervinkite! Valdikliai paprastai teikia geriausią vartotojo patirtį, kai suteikia lengvą prieigą prie nedidelio laiko, svarbios informacijos ar kelių dažniausiai naudojamų funkcijų. Kad jūsų hibridiniai valdikliai būtų lengvi, rekomenduojama nustatyti pagrindinę valdiklio kategoriją, ją sukurti atsižvelgiant į tą kategoriją ir tada pridėkite kelis elementus iš valdiklio antrinės kategorijos.

Ar mano projektui tikrai reikia programos valdiklio?

Yra keletas priežasčių, kodėl turėtumėte apsvarstyti galimybę pridėti programos valdiklį prie „Android“ projekto.


„Android“ valdikliai gali pagerinti vartotojo patirtį

Paprastai kuo mažiau naršymo veiksmų reikia atlikti užduočiai atlikti, tuo geresnė vartotojo patirtis.

Pateikdami programos valdiklį, galite pašalinti kelis naršymo veiksmus iš dažniausiai naudojamų programos srautų. Geriausiu atveju jūsų vartotojai galės gauti reikiamą informaciją tik žvilgtelėję į pagrindinį ekraną arba atlikti norimą užduotį tiesiog bakstelėdami mygtuką savo valdiklyje.

Galingesni nei programų spartieji klavišai

Programų valdikliai dažnai reaguoja į „onClick“ įvykius paleisdami aukščiausią susijusios programos lygį, panašiai kaip programos nuorodą. Valdikliai taip pat gali suteikti tiesioginę prieigą prie konkrečios programos veiklos, pvz., Palietus valdiklio naują gautą pranešimą, gali būti paleista susieta programa su nauja, jau atidaryta.

Įterpdami keletą nuorodų į savo valdiklio išdėstymą, galite suteikti prieigą prie vieno mygtuko paspaudimo prie visos svarbiausios programos veiklos, pašalindami dar daugiau naršymo žingsnių iš dažniausiai naudojamų srautų.

Įterpdami kelias nuorodas į savo valdiklio išdėstymą, galėsite suteikti prieigą vienu mygtuko paspaudimu prie visos jūsų programos svarbiausios veiklos.

Atminkite, kad valdikliai reaguoja tik į „onClick“ įvykius, o tai neleidžia vartotojams netyčia sąveikauti su jūsų valdikliu, kol jie slidinėja aplink pagrindinį ekraną. Vienintelė išimtis yra tada, kai vartotojas bando ištrinti jūsų valdiklį, vilkdamas jį į pagrindinio ekrano veiksmą Pašalinti, nes tokiu atveju jūsų valdiklis atsakys į vertikalų perbraukimo gestą.

Šią sąveiką tvarko „Android“ sistema, todėl jums nereikia jaudintis, kad savo valdiklyje rankiniu būdu įdiegtumėte vertikalaus perbraukimo palaikymą.

Sukurkite „Android“ valdiklį, kad galėtumėte skatinti ilgalaikį įsitraukimą

Žmonių įtikinimas atsisiųsti jūsų programą yra tik pirmas žingsnis kuriant sėkmingą „Android“ programą. Tikėtina, kad patraukę savo „Android“ išmanųjį telefoną ar planšetinį kompiuterį ir braukdami per programų stalčių, pamatysite kelias programas, kurių nenaudojote dienomis, savaitėmis ar galbūt net mėnesiais!

Taip pat skaitykite:Darbo su „Android“ SDK „Facebook“ pradžia

Kai jūsų programa bus sėkmingai įdiegta vartotojo įrenginyje, turėsite sunkiai dirbti, kad jie liktų įsitraukę ir mėgautųsi jūsų programa. Programos buvimas pagrindiniame ekrane gali būti galinga priemonė, padedanti skatinti ilgalaikį įsitraukimą, tiesiog todėl, kad tai nuolat primena, kad jūsų programa egzistuoja!

Gerai suprojektuotas valdiklis taip pat gali būti nuolatinis jūsų programos skelbimas. Kiekvieną kartą, kai vartotojas pažvelgia į pagrindinį ekraną, jūsų valdiklis turi galimybę aktyviai paskatinti juos vėl įsitraukti į jūsų programą pateikdamas jiems visą jūsų programos įdomiausią ir naudingiausią turinį.

Sukuriamas kolekcijos programos valdiklis

Šiame vadove mes sukursime kolekcijos valdiklį, kuriame masyvas rodomas kaip slenkama „ListView“.

Kad būtų lengviau sekti programos valdiklio gyvavimo ciklą, šis valdiklis taip pat suaktyvins įvairius tostus, kai juda per skirtingas būvio ciklo būsenas. Pasibaigus šiai mokymo programai, mes patobulinsime savo valdiklį naudodami pasirinktinį peržiūros vaizdą, kuris bus rodomas „Android“ valdiklių rinkinyje, ir konfigūravimo veiklą, kuri vartotojams leis pritaikyti valdiklį prieš dedant jį į pagrindinį ekraną.

Sukurkite naują „Android“ projektą pasirinktais nustatymais ir pradėkime!

Valdiklio išdėstymo kūrimas

Norėdami pradėti, apibrėžkime valdiklio vartotojo sąsają (vartotojo sąsają).

Programos valdikliai rodomi proceso metu lauke jūsų programą, todėl galite naudoti tik tuos išdėstymus ir rodinius, kuriuos palaiko „RemoteViews“.

Kurdami savo išdėstymą, turite apsiriboti šiais dalykais:

  • „AnalogClock“
  • Mygtukas
  • Chronometras
  • „FrameLayout“
  • „GridLayout“
  • „ImageButton“
  • „ImageView“
  • „LinearLayout“
  • Progreso juosta
  • „RelativeLayout“
  • „TextView“
  • „ViewStub“
  • „AdapterViewFlipper“
  • Tinklelio vaizdas
  • Sarašas
  • „StackView“
  • „ViewFlipper“

Atminkite, kad aukščiau išvardytų klasių ir rodinių poklasiai yra ne palaikoma.

Sukurkite naują išdėstymo išteklių failą pavadinimu list_widget.xml. Kadangi duomenis rodysime naudodami „ListView“, šis išdėstymas daugiausia naudojamas kaip „a“ talpykla elementas:

Kolekcijos valdiklis užpildomas

Kitas, mes turime sukurti duomenų teikėją savo „ListView“. Sukurkite naują „Java“ klasę pavadinimu „DataProvider.java“ ir pridėkite:

importuoti android.content.Context; importuoti android.content.Intent; importuoti „android.widget.RemoteViews“; importuoti „android.widget.RemoteViewsService“; importuoti java.util.ArrayList; import java.util.List; importuoti statinį android.R.id.text1; importuoti statinį „android.R.layout.simple_list_item_1“; viešosios klasės „DataProvider“ įgyvendina „RemoteViewsService.RemoteViewsFactory“ {sąrašas myListView = naujas ArrayList <> (); Kontekstas „mContext“ = nulis; public DataProvider (kontekstinis kontekstas, ketinimas) {mContext = kontekstas; } @Atšaukti viešą tuštumą onCreate () {initData (); } @Atšaukti viešą tuštumą onDataSetChanged () {initData (); } @Orride public void onDestroy () {} @Orride public int getCount () {return myListView.size (); } @Atnaujinti viešuosius „RemoteViews“ getViewAt (vidinė padėtis) {RemoteViews view = new RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); vaizdas atgal; } @Atšaukti viešus „RemoteViews“ getLoadingView () {return null; } @Atšaukti viešą int getViewTypeCount () {grąžinti 1; } @Atšaukti viešą ilgą „getItemId“ (vidinė padėtis) {grąžinimo pozicija; } @Atšaukti viešą boolean hasStableIds () {return true; } private void initData () {myListView.clear (); for (int i = 1; i <= 15; i ++) {myListView.add ("ListView item" + i); }}}

„AppWidgetProvider“: valdiklio konfigūravimas

Norėdami sukurti „Android“ valdiklį, turite sukurti kelis failus.

Pirmasis specifinis valdikliui skirtas failas yra „AppWidgetProvider“, kuris yra „BroadcastReceiver“, kuriame apibrėžsite įvairius valdiklių būvio ciklo metodus, tokius kaip metodas, kuris vadinamas, kai jūsų valdiklis sukuriamas pirmą kartą, ir metodas, kuris vadinamas, kai tas valdiklis galiausiai ištrinamas.

Sukurkite naują „Java“ klasę (Failas> Nauja> „Java“ klasė) pavadinimu „CollectionWidget“.

Norėdami pradėti, visi valdiklių teikėjų failai turi būti išplėsti iš „AppWidgetProvider“ klasės. Tada turime įkelti „RemoteViews“ objektą „list_widget.xml“ išdėstymo šaltinio failą ir informuoti „AppWidgetManager“ apie atnaujintą „RemoteViews“ objektą:

viešosios klasės „CollectionWidget“ išplečia „AppWidgetProvider“ {static void updateAppWidget (kontekstinis kontekstas, „AppWidgetManager“ appWidgetManager, int appWidgetId) {// Panaikinkite „RemoteViews“ objektą // „RemoteViews“ rodiniai = nauji „RemoteViews“ (kontekstas.getPackageoutName (), R.). setRemoteAdapter (kontekstas, rodiniai); // Paprašykite, kad „AppWidgetManager“ atnaujintų programos valdiklį // appWidgetManager.updateAppWidget (appWidgetId, rodiniai); }

Sukurkite adapterį

Kadangi rodome savo duomenis „ListView“, turime apibrėžti „setRemoteAdapter ()“ metodą savo „AppWidgetProvider“. „SetRemoteAdapter“ () prilygsta „AbsListView.setRemoteViewsAdapter“ () iškvietimui, tačiau yra skirtas naudoti programų valdikliuose.

Taikant šį metodą turime apibrėžti „AdapterView“ (R.id.widget_list) ID ir paslaugos, kuri galiausiai pateiks duomenis mūsų „RemoteViewsAdapter“, idėją - netrukus sukursime šią „WidgetService“ klasę.

private static void setRemoteAdapter (kontekstinis kontekstas, @NonNull galutiniai „RemoteViews“ rodiniai) {Views.setRemoteAdapter (R.id.widget_list, new Intent (kontekstas, WidgetService.class)); }}

Apibrėžti valdiklio gyvavimo ciklo metodus

„AppWidgetProvider“ taip pat turime apibrėžti šiuos valdiklio būvio ciklo metodus:

Naujo turinio gavimas naudojant „onUpdate“

„OnUpdate“ () valdiklio būvio ciklo metodas yra atsakingas už jūsų valdiklio rodinių atnaujinimą nauja informacija.

Šis metodas vadinamas kiekvieną kartą:

  • Vartotojas atlieka veiksmą, kuris rankiniu būdu suaktyvina onUpdate () metodą.
  • Nurodė programos atnaujinimo intervalas.
  • Vartotojas į savo pagrindinį ekraną įkelia naują šio valdiklio egzempliorių.
  • ACTION_APPWIDGET_RESTORED transliacijos ketinimas siunčiamas „AppWidgetProvider“. Šis transliavimo ketinimas suaktyvinamas, jei valdiklis kada nors atkuriamas sukuriant atsarginę kopiją.

Čia taip pat užregistruosite bet kokius įvykių tvarkytuvus, kuriuos turėtų naudoti jūsų valdiklis.

Atnaujindami „Android“ valdiklį, svarbu atsiminti, kad vartotojai gali sukurti kelis to paties valdiklio egzempliorius. Pvz., Galbūt jūsų valdiklį galima pritaikyti ir vartotojas nusprendžia sukurti keletą „versijų“, kuriose rodoma skirtinga informacija, arba suteikti prieigą prie unikalių funkcijų.

Kai skambinate „Uppdate“ (), turite nurodyti, ar atnaujinate kiekvieną šio valdiklio egzempliorių, ar tik konkretų egzempliorių. Jei norite atnaujinti kiekvieną egzempliorių, galite naudoti „appWidgetIds“, tai yra ID masyvas, identifikuojantis kiekvieną įrenginio egzempliorių.

Šiame fragmente atnaujinu kiekvieną egzempliorių:

@ Negalima viešai paskelbti negaliojančių „onUpdate“ (kontekstinis kontekstas, „AppWidgetManager appWidgetManager“, „int appWidgetIds“) {skirta (int appWidgetId: appWidgetIds) {// Atnaujinti visus šio valdiklio egzempliorius // updateAppWidget (kontekstas, appWidgetManager, appWidgetId); } super.onUpdate (kontekstas, appWidgetManager, appWidgetIds); }

Atminkite, kad siekiant lengviau suprasti kodą, šiuo „onUpdate ()“ metodu valdiklis nepakeičiamas.

onEnabled: pradinės sąrankos atlikimas

„OnEnabled“ () gyvenimo ciklo metodas iškviečiamas reaguojant į ACTION_APPWIDGET_ENABLED, kuris siunčiamas, kai jūsų valdiklio egzempliorius pridedamas prie pagrindinio ekrano, Pirmas laikas. Jei vartotojas sukuria du jūsų valdiklio egzempliorius, tada onEnabled () bus pašauktas pirmajam egzemplioriui, bet ne antrą.

„OnEnabled“ () ciklo metodas yra tas, kuriame turite atlikti visus nustatymus, reikalingus visiems jūsų valdiklio egzemplioriams, pvz., Sukurti duomenų bazę, kurioje bus jūsų valdiklio informacija.

Aš parodysiu skrebučius, kad galėtumėte tiksliai pamatyti, kada vadinamas šis gyvenimo ciklo metodas:

@Atšaukti viešą tuštumą onEnabled (kontekstinis kontekstas) {Toast.makeText (kontekstas, "onEnabled vadinamas", Toast.LENGTH_LONG) .show (); }

Atminkite, kad jei vartotojas ištrins visus jūsų valdiklio egzempliorius ir tada sukurs naują egzempliorių, tai bus klasifikuojama kaip pirmoji instancija, o „onEnabled“ () ciklo metodas bus vėl iškviestas.

Valymas, įjungus išjungimą

OnDisabled () metodas iškviečiamas reaguojant į ACTION_APPWIDGET_DISABLED, kuris suaktyvinamas, kai vartotojas ištrina paskutinis jūsų valdiklio pavyzdys.

Šis valdiklio gyvenimo ciklo metodas turėtų būti toks, kad turėtumėte išvalyti visus „onEnabled“ () metodu sukurtus išteklius, pavyzdžiui, ištrinti duomenų bazę, kurią sukūrėte naudodami onEnabled ().

Kad būtų lengviau suprasti mūsų kodą, aš tiesiog rodysiu skrebučius kiekvieną kartą, kai suaktyvinamas šis metodas:

@Atšaukti viešą tuštumą onDisabled (kontekstinis kontekstas) {Toast.makeText (kontekstas, "onDisabled vadinamas", Toast.LENGTH_LONG) .show (); }

Užbaigtas „AppWidgetProvider“

Dabar „CollectionWidget“ failas turėtų atrodyti taip:

importuoti „android.appwidget.AppWidgetManager“; importuoti „android.appwidget.AppWidgetProvider“; importuoti android.content.Context; importuoti androidx.annotation.NonNull; importuoti android.content.Intent; importuoti „android.widget.RemoteViews“; importuoti android.widget.Toast; // Pratęsti iš „AppWidgetProvider“ klasės // viešosios klasės „CollectionWidget“ išplečia „AppWidgetProvider“ {static void updateAppWidget (kontekstinis kontekstas, „AppWidgetManager appWidgetManager“, int appWidgetId) {// Įkelkite maketų išteklių failą į „RemoteViews“ objektą („RemoteViews“ vaizdai = nauji. getPackageName (), R.layout.list_widget); setRemoteAdapter (kontekstas, rodiniai); // Informuokite „AppWidgetManager“ apie „RemoteViews“ objektą // appWidgetManager.updateAppWidget (appWidgetId, rodiniai); } @Atšaukti viešą negaliojimą „Atnaujinta“ (kontekstinis kontekstas, „AppWidgetManager appWidgetManager“, „int appWidgetIds“) {skirta (int appWidgetId: appWidgetIds) {updateAppWidget (kontekstas, appWidgetManager, appWidgetId); } super.onUpdate (kontekstas, appWidgetManager, appWidgetIds); } @Atšaukti viešą tuštumą onEnabled (kontekstinis kontekstas) {Toast.makeText (kontekstas, "onEnabled vadinamas", Toast.LENGTH_LONG) .show (); } @Atšaukti viešą tuštumą onDisabled (kontekstinis kontekstas) {Toast.makeText (kontekstas, „onDisabled vadinamas“, Toast.LENGTH_LONG) .show (); } privatus statinis negaliojantis setRemoteAdapter (kontekstinis kontekstas, @NonNull galutiniai „RemoteViews“ rodiniai) {Views.setRemoteAdapter (R.id.widget_list, new Intent (kontekstas, WidgetService.class)); }}

„AppWidgetProviderInfo“ failas

Jūsų programos valdikliui taip pat reikalingas „AppWidgetProviderInfo“ failas, apibrėžiantis keletą svarbių ypatybių, įskaitant būtiniausius valdiklio matmenis ir tai, kaip dažnai jis turėtų būti atnaujinamas.

„AppWidgetProviderInfo“ failas saugomas projekto aplanke „res / xml“.

Jei jūsų projekte dar nėra šio aplanko, turėsite jį sukurti:

  • Valdymo klavišu spustelėkite savo projekto aplanką.
  • Pasirinkite Naujas> „Android“ išteklių katalogas.
  • Kitame lange atidarykite išskleidžiamąjį ištekliaus tipą ir pasirinkite xml.
  • Katalogo pavadinimas turėtų būti automatiškai atnaujinamas į xml, bet jei jo nėra, turėsite jį pakeisti rankiniu būdu.
  • Spustelėkite Gerai.

Tada sukurkite „collection_widget_info“ failą, kurį naudosime kaip „AppWidgetProviderInfo“:

  • Valdydami spustelėkite savo projekto XML aplanką.
  • Pasirinkite Naujas> XML išteklių failas.
  • Pavadinkite šį failą collection_widget_info.
  • Spustelėkite Gerai.

„AppWidgetProviderInfo“ faile turime apibrėžti šias savybes:

1. „Android“: previewImage

Tai yra piešinys, vaizduojantis jūsų programos valdiklį įrenginio valdiklių rinkinyje.

Jei nepateikiate „previewImage“, „Android“ vietoje to naudos jūsų programos piktogramą. Norėdami paskatinti vartotojus pasirinkti jūsų valdiklį iš valdiklių rinkiklio, turėtumėte pateikti brėžinį, kuriame būtų parodyta, kaip jūsų valdiklis atrodys tinkamai sukonfigūravęs vartotojo pagrindiniame ekrane.

Paprasčiausias būdas sukurti peržiūros vaizdą yra naudoti valdiklio peržiūros programą, kuri įtraukta į „Android“ emuliatorių. Ši programa leidžia sukonfigūruoti valdiklį ir tada sugeneruoti vaizdą, kurį galėsite naudoti savo „Android“ projekte.

Sukursime šį vaizdą, kai tik baigsime kurti savo valdiklį, todėl dabar kaip laikiną peržiūros vaizdą naudosiu automatiškai sugeneruotą „mipmap“ / „ic_launcher“ išteklius.

2. „Android“: „widgetCategory“

Programų valdikliai turi būti dedami į „App Widget Host“, kuris paprastai yra „Android“ pagrindinis ekranas, bet taip pat gali būti trečiųjų šalių paleidimo priemonė, pavyzdžiui, „Evie Launcher“ ar „Nova Launcher“.

Tarp 17 ir 20 API lygių pagrindiniame ekrane buvo galima dėti programų valdiklius arba „lockscreen“, tačiau „lockscreen“ palaikymas buvo nustotas naudoti 21 API lygyje.

Naudodamiesi atributu android: widgetCategory, galite nurodyti, ar programos valdiklį galima dėti į pagrindinį ekraną, užrakinimo ekraną (kurį „Android“ vadina „klaviatūros apsauga“), ar abu kartu. Kadangi naujausiose „Android“ versijose negalima raktų užrakinimo ekrane naudoti, taikysime tik pagrindiniame ekrane.

Kad būtų išsaugotas vartotojo privatumas, jūsų valdiklyje, rodomame užrakinimo ekrane, neturėtų būti rodoma jokia slapta ar privati ​​informacija.

Jei vartotojams suteiksite galimybę patalpinti jūsų valdiklį užrakinimo ekrane, tai kiekvienas, žvilgtelėjęs į vartotojo įrenginį, galėjo pamatyti jūsų valdiklį ir visą jo turinį. Kad būtų išsaugotas vartotojo privatumas, jūsų valdiklyje, kai jis patalpinamas užrakinimo ekrane, neturėtų būti rodoma jokia slapta ar privati ​​informacija. Jei jūsų valdiklyje yra asmeninių duomenų, tada galbūt norėsite pateikti atskirą pagrindinio ekrano ir užrakinimo ekrano išdėstymą.

3. „Android“: pradinė „Layout “

Tai yra išdėstymo šaltinio failas, kurį jūsų valdiklis turėtų naudoti, kai jis patalpinamas pagrindiniame ekrane, kuris mūsų projektui yra sąrašas_widget.xml.

4. „Android“: resizeMode = „horizontalus | vertikalus“

„Android“: „resizeMode“ atributas leidžia nurodyti, ar jūsų valdiklio dydis gali būti keičiamas horizontaliai, vertikaliai ar išilgai abiejų ašių.

Norint užtikrinti, kad jūsų valdiklis rodomas ir tinkamai funkcionuotų įvairiuose ekranuose, rekomenduojama leisti valdiklio dydį pakeisti horizontaliai. ir vertikaliai, nebent turite konkrečią priežastį to nedaryti.

5. „Android“: „minHeight“ ir „Android“: „minWidth“

Jei jūsų valdiklio dydį galima pakeisti, tada turite įsitikinti, kad vartotojas nesusitraukia jūsų valdikliui iki vietos, kur jis tampa nenaudotinas. Galite naudoti atributus „minHeight“ ir „minWidth“, kad apibrėžtumėte mažiausią jūsų programą, kuri sumažės, kai vartotojas pakeis jos dydį.

Šios vertės taip pat parodo pradinį valdiklio dydį, taigi, jei jūsų valdiklio dydis nėra keičiamas, tada „minHeight“ ir „minWidth“ nustatys valdiklio nuolatinį dydį.

6. android: atnaujintiPeriodMillis

„AppWidgetProviderInfo“ taip pat yra vieta, kurioje jūs nurodysite, kaip dažnai jūsų valdiklis turėtų prašyti naujos informacijos.

Mažiausias palaikomas atnaujinimo intervalas yra kartą per 1800000 milisekundžių (30 minučių). Net jei paskelbiate trumpesnį atnaujinimo intervalą, jūsų valdiklis vis tiek atnaujins tik kartą per pusvalandį.

Nors galbūt norėsite kuo greičiau parodyti naujausią informaciją, sistema bus pažadinkite miego įtaisą, kad gautumėte naujos informacijos. Dažni atnaujinimai gali sudegti per įrenginio akumuliatorių, ypač tais atvejais, kai įrenginys ilgą laiką nenaudojamas, pavyzdžiui, per naktį. Teikti geriausią patirtį vartotojui reiškia rasti pusiausvyrą tarp baterijos sunaudojimo ribojimo ir naujos informacijos pateikimo per pagrįstą laiką.

Taip pat turėtumėte atsižvelgti į tai, kokį turinį rodys jūsų valdiklis.

Taip pat turėtumėte atsižvelgti į tai, kokį turinį rodys jūsų „Android“ valdikliai. Pvz., Orų valdikliui gali reikėti tik kartą per dieną nuskaityti atnaujintą prognozę, tuo tarpu programą, kurioje rodomos naujausios naujienos, reikės atnaujinti dažniau.

Norint rasti šį puikų balansą, gali tekti išbandyti savo valdiklį įvairiais atnaujinimo dažniais ir išmatuoti poveikį akumuliatoriaus veikimo laikui bei jūsų valdiklio turinio savalaikiškumui. Jei turite norinčių bandytojų grupę, netgi galėtumėte nustatyti A / B testavimą, kad pamatytumėte, ar kai kurie atnaujinimo dažniai yra priimami labiau nei kiti.

Taip pat skaitė: „AndroidManifest.xml“ viskas, ką reikia žinoti

Galiausiai, nustatę geriausią atnaujinimo intervalą, galite sukurti trumpesnį intervalą kurdami ir išbandydami savo programą. Pvz., Galite naudoti trumpiausią įmanomą atnaujinimo dažnį („Android“: updatePeriodMillis = ”1800000 ″), kai bandote, ar jūsų programos„ OnUdate “() metodas veikia tinkamai, ir tada pakeiskite šią vertę prieš išleisdami programą plačiajai visuomenei.

Užbaigtas „AppWidgetProviderInfo“

Baigtas rinkti rinkinys_widget_info.xml turėtų atrodyti taip:

Neuždenkite vartotojo pagrindinio ekrano!

Norėdami užtikrinti, kad pagrindinis ekranas niekada neatrodys netvarkingai, prie savo valdiklio pridėsime šiek tiek paminkštinimo ir paraštės. Jei jūsų projekte dar nėra „dimens.xml“ failo, turėsite jį sukurti:

  • Valdymo klavišu spustelėkite projekto vertybių aplanką.
  • Pasirinkite Naujas> Vertybių šaltinio failas.
  • Suteikite šiam failui pavadinimą silpnesnį.
  • Spustelėkite Gerai.

Atidarykite savo dimens.xml failą ir apibrėžkite šias paraštės ir užpildymo reikšmes:

10 dp 8 dp

Duomenų siuntimas į valdiklį

Kitas, mes turime sukurti valdiklio paslaugą, kuri bus atsakinga už rinkimo duomenų siuntimą į valdiklį.

Sukurkite naują „Java“ klasę (Nauja> „Java“ klasė) pavadinimu „WidgetService“ ir pridėkite:

importuoti android.content.Intent; importuoti „android.widget.RemoteViewsService“; viešosios klasės „WidgetService“ išplečia „RemoteViewsService“ {@Orreide public RemoteViewsFactory onGetViewFactory (Intent intente) {grąžina naują „DataProvider" (šis, ketinimas); }}

Savo valdiklio registravimas manifeste

Dabar turime šiek tiek pakeisti savo projekto manifestą.

Norėdami pradėti, atidarykite manifestą ir užregistruokite savo valdiklį kaip „BroadcastReceiver“. Taip pat turime pridėti intencijų filtrą „android.appwidget.action.APPWIDGET_UPDATE“ veiksmui:

Toliau turite nurodyti programos valdiklio teikėją:

Galiausiai turime deklaruoti paslaugą, kuri siųs duomenis į mūsų valdiklį, kuris šiuo atveju yra „WidgetService“ klasė. Šiai paslaugai reikalingas „android.permission.BIND_REMOTEVIEWS“ leidimas:

Pabandykite savo valdiklį

Jei sekėte kartu su šia mokymo programa, dabar turėsite visą kolekcijos valdiklį, kuris duomenų rinkinį rodo pagrindiniame vartotojo ekrane.

Jei tai buvo realus „Android“ projektas, tada paprastai plėtojotės būvio ciklo metodais, ypač onUpdate () metodu, tačiau tai yra viskas, ko mums reikia norint sukurti valdiklį, kurį galite įdiegti ir išbandyti „Android“ įrenginyje:

  • Įdiekite šį projektą suderinamame „Android“ išmaniajame telefone, planšetiniame kompiuteryje arba AVD („Android“ virtualiame įrenginyje).
  • Ilgai paspauskite bet kurį tuščią pagrindinio ekrano skyrių ir, kai būsite paraginti, pasirinkite Raštai; tai paleidžia valdiklių rinkiklį.
  • Braukite per valdiklių rinkiklį, kol rasite ką tik sukurtą programos valdiklį.
  • Norėdami įtraukti jį į pagrindinį ekraną, ilgai spauskite šį valdiklį.
  • Kadangi tai yra pirmasis šio konkretaus valdiklio egzempliorius, turėtų būti paleistas metodas „onEnabled ()“ ir pamatysite skrudinta duona „onEnabled vadinamas“.
  • Pakeiskite savo valdiklio dydį. Jei nustatėte mažiausią palaikomą dydį, patikrinkite, ar negalite sumažinti valdiklio, viršijančio šią vertę.
  • Patikrinkite, ar „ListView“ slenka, kaip tikėtasi.
  • Tada turėtumėte patikrinti „onDisabled“ () metodą, ištrindami valdiklį. Ilgai paspauskite valdiklį, tada pasirinkite Pašalinti iš pagrindinio ekrano. Kadangi tai yra paskutinis šio konkretaus valdiklio egzempliorius, turėtų būti paleistas „onDisabled ()“ metodas ir pamatysite skrudinta duona „onDisabled vadinama“.

Tai viskas, ko jums reikia veikiančiam „Android“ programos valdikliui pateikti, tačiau yra keletas papildymų, kurie dažnai gali pagerinti vartotojo patirtį. Tolesniuose skyriuose raginsime vartotojus pasirinkti šį valdiklį iš valdiklių rinkiklio sukurdami peržiūros vaizdą, kuris geriausiai parodo valdiklį. Taip pat parodysiu, kaip sukurti visiškai pritaikomą valdiklį, į savo projektą įtraukiant konfigūravimo veiklą.

Sukuriamas „Android“ valdiklio peržiūros vaizdas

Jei griebiate „Android“ įrenginį ir perbraukite per valdiklių rinkiklį, pamatysite, kad kiekvieną valdiklį vaizduoja vaizdas, kuris paprastai parodo, kaip šis valdiklis atrodys sukonfigūravus pagrindiniame vartotojo ekrane.

Norėdami paskatinti vartotojus pasirinkti jūsų valdiklį, turėtumėte pateikti peržiūros vaizdą, kuriame pabrėžiama visa naudinga informacija ir funkcijos, kurias gali pasiūlyti jūsų valdiklis.

Galite greitai ir lengvai sukurti peržiūros vaizdą naudodami valdiklio peržiūros programą, kuri įtraukta į „Android“ emuliatorių.

Atminkite, kad valdiklio peržiūra nėra įtraukta į naujausius „Android“ sistemos vaizdus, ​​todėl turėsite sukurti AVD naudodami „Nougat“ (API lygis 25 arba senesnę versiją):

  • Įdiekite savo programą į AVD, kuriame veikia 25 ar senesnė API.
  • Atidarykite AVD programų stalčių ir paleiskite „Widget Preview“ programą.
  • Valdiklio peržiūroje bus pateiktas visų programų, šiuo metu įdiegtų šiame AVD, sąrašas; iš sąrašo pasirinkite savo programą.

  • Dabar jūsų valdiklis bus rodomas tuščiame fone. Praleiskite šiek tiek laiko pakeisdami ir keisdami savo valdiklį, kol jis parodys geriausias galimybes, kurias jūsų valdiklis gali pasiūlyti.
  • Kai būsite patenkinti savo valdiklio išvaizda ir turiniu, pasirinkite Nufotografuoti.

  • Norėdami gauti momentinį vaizdą, perjunkite atgal į „Android Studio“ ir įrankių juostoje pasirinkite Peržiūra> „Windows“ įrankis “>„ Device File Explorer “. Tai paleidžia „Android Studio“ įrenginio failų naršyklę.
  • Įrenginio failų naršyklėje eikite į sdcard / Download. Peržiūrėtą vaizdą turėtumėte išsaugoti tokiu formatu: _ori_.png

  • Nuvilkite šį vaizdą iš „Android Studio“ ir numeskite jį lengvai pasiekiamoje vietoje, pavyzdžiui, darbalaukyje.
  • Suteikite šiam paveikslėlio failui aprašomą pavadinimą.
  • Nuvilkite failą į projekto piešimo aplanką.
  • Atidarykite „AppWidgetProviderInfo“, kuris šiam projektui yra collection_widget_info.xml.
  • Raskite „Android“: previewImage = ”@ mipmap / ic_launcher” eilutę ir atnaujinkite ją, kad pateiktumėte nuorodą į peržiūros vaizdą.

Jūsų valdiklis dabar naudos šį naują vaizdo šaltinį kaip savo peržiūros vaizdą:

  • Įdiekite atnaujintą projektą savo fiziniame „Android“ įrenginyje arba AVD.
  • Ilgai paspauskite bet kurią tuščią pagrindinio ekrano dalį.
  • Bakstelėkite Valdikliai, kuris paleidžia valdiklių rinkiklį.
  • Pereikite prie savo valdiklio; dabar jis turėtų naudoti atnaujintą peržiūros vaizdą.

Pritaikomi valdikliai: konfigūravimo veiklos pridėjimas

Konfigūravimo veikla pradedama automatiškai, kai vartotojas kiekvieną jūsų valdiklio egzempliorių pateikia pagrindiniame ekrane.

Yra keletas priežasčių, kodėl galite norėti pridėti konfigūracijos veiklą prie savo projekto.

valdikliai paprastai teikia geriausią vartotojo patirtį, kai suteikia prieigą prie informacijos ar funkcijų, kurios yra svarbiausios individualiam vartotojui.

Pirma, kai kuriems valdikliams reikalingas pradinis sąranka, pavyzdžiui, valdikliui, kuris rodo eismo įspėjimus, gali reikėti žinoti vartotojo namų adresą, kur jie dirba, ir laiką, kada jie paprastai važiuoja į darbą ar iš jo. Jei kažkaip neįvesite šios informacijos, jūsų valdiklis gali būti visiškai nenaudingas!

Be to, valdikliai teikia geriausią vartotojo patirtį, kai suteikia prieigą prie informacijos ar funkcijų, kurios yra svarbiausios individualiam vartotojui. Pridėję konfigūravimo veiklą prie savo projekto, vartotojams galėsite suteikti laisvę pasirinkti tiksliai kas įtraukta į jūsų valdiklį.

Net ir gana nesudėtingi tinkinimai, tokie kaip valdiklio fono ar šrifto keitimas, gali daryti teigiamą poveikį vartotojo patirčiai - juk niekas neįvertins valdiklio, kuris vizualiai susikerta su likusiu pagrindiniu ekranu!

Niekas neįvertins valdiklio, kuris vizualiai susikerta su likusiu pagrindiniu ekranu!

Arba kartais gali būti ilgas turinio, kurį norite įtraukti į savo valdiklį, sąrašas, ir jūs stengiatės susiaurinti savo galimybes. Konfigūravimo veikla gali būti būdas panaudoti visas jūsų idėjas be jų kuria netvarkingas, painus valdiklis. Tiesiog atminkite, kad nustatant valdiklį nereikėtų jaudintis, todėl, jei pateikiate konfigūravimo veiklą, rekomenduojama apsiriboti trimis konfigūravimo parinktimis.

Pridėkime projekto konfigūracijos veiklą!

Pirmiausia, mūsų konfigūracijos veiklai reikalingas išdėstymas, todėl sukurkite naują maketo išteklių failą pavadinimu config_activity.xml.

Prie šio išdėstymo pridėsiu šiuos mygtukus:

  • Konfigūracijos mygtukas. Realiame gyvenime šis mygtukas tam tikru būdu modifikuotų valdiklį, pavyzdžiui, pridėdamas ar pašalindamas turinį arba keisdamas valdiklio atnaujinimo dažnumą. Kad būtų lengviau suprasti mūsų kodą, spustelėjus šį mygtuką, paprasčiausiai bus parodytas konfigūracijos parinkčių skrebutis.
  • Sąrankos mygtukas. Kai vartotojas bus patenkintas tuo, kaip sukonfigūruotas jo valdiklis, paspaudus šį mygtuką naujai sukonfigūruotas valdiklis bus rodomas pagrindiniame ekrane.

Štai mano baigtas failas „config_activity.xml“:

Sukurkite konfigūracijos veiklą

Dabar turime sukurti savo konfigūracijos veiklą.

Norėdami pradėti, sukurkite naują „Java“ klasę pavadinimu „ConfigActivity“. Šioje veikloje norime nuskaityti programos valdiklio ID, jei ketinome pradėti konfigūravimo veiklą. Jei šis ketinimas neturi valdiklio ID, turėsime paskambinti baigimo () metodu:

Ketinimų ketinimas = getIntent (); Ryšio priedai = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {baigti (); }

Kitas, mes turime sukurti grąžinimo ketinimą, perduoti originalų appWidgetId ir nustatyti rezultatus iš konfigūracijos veiklos:

Intent resultValue = naujas ketinimas (); tulemusValue.putExtra („AppWidgetManager.EXTRA_APPWIDGET_ID“, „appWidgetId“); setResult (RESULT_OK, rezultato vertė); baigti(); }}}

Jei pateiksite konfigūravimo veiklą, tada ACTION_APPWIDGET_UPDATE transliacija nebus automatiškai siunčiama, kai bus paleista konfigūravimo veikla, o tai reiškia „onUpdate“ () metodą nebus būti vadinamas, kai vartotojas sukuria jūsų valdiklio egzempliorių.

Norėdami įsitikinti, kad jūsų valdiklyje yra naujausia informacija ir turinys, jūsų konfigūracijos veikla privalo suaktyvinti pirmą „onUpdate“ () užklausą.

Štai baigta „ConfigActivity“:

importuoti „android.app.Activity“; importuoti „android.appwidget.AppWidgetManager“; importuoti android.os.Bundle; importuoti android.widget.Button; importuoti android.content.Intent; importuoti android.view.View; importuoti „android.view.View.OnClickListener“; importuoti android.widget.Toast; viešosios klasės „ConfigActivity“ pratęsia veiklą {@Oreride apsaugota negaliojanti onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); „setContentView“ (R.layout.config_activity); setResult (RESULT_CANCELED); Mygtukas setupWidget = (Mygtukas) findViewById (R.id.setupWidget); „setupWidget.setOnClickListener“ (naujas „OnClickListener“) ({@Oreride public void onClick (View v) {handleSetupWidget ();}}); Mygtukas configButton = (mygtukas) findViewById (R.id.configButton); „configButton.setOnClickListener“ (naujas „OnClickListener“ () {@Oreride public void onClick (View v) {handleConfigWidget ();}}); } privati ​​negaliojanti rankenaSetupWidget () {showAppWidget (); } privati ​​negaliojanti rankenaConfigWidget () {Toast.makeText (ConfigActivity.this, "Configuration options", Toast.LENGTH_LONG) .show (); } int appWidgetId; privati ​​tuštuma showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Ketinimų ketinimas = getIntent (); Ryšio priedai = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {baigti (); } // VYKDYTI: atlikite konfigūraciją // Intent resultValue = new Intent (); tulemusValue.putExtra („AppWidgetManager.EXTRA_APPWIDGET_ID“, „appWidgetId“); setResult (RESULT_OK, rezultato vertė); baigti(); }}}

Sukūrę konfigūravimo veiklą, turite deklaruoti šią veiklą manifeste ir nurodyti, kad ji priima APPWIDGET_CONFIGURE veiksmą:

Galiausiai, kadangi konfigūravimo veikla yra nurodoma už paketo ribų, šią veiklą turime deklaruoti „AppWidgetProviderInfo“, kuris šiuo atveju yra rinkinys_widget_info.xml:

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

Savo projekto išbandymas

Dabar pats laikas išbandyti savo gatavą projektą:

  • Įdiekite atnaujintą projektą fiziniame „Android“ įrenginyje arba AVD.
  • Ištrinkite visus ankstesnius valdiklio egzempliorius, kad įsitikintumėte, jog dirbate su pačia naujausia versija.
  • Ilgai paspauskite bet kurį tuščią pagrindinio ekrano plotą ir, kai būsite paraginti, pasirinkite Raštai.
  • Valdiklių rinkinyje raskite savo valdiklį ir ilgai jį paspauskite, kad pasirinktumėte.
  • Perkelkite valdiklį į pagrindinį ekraną. Konfigūravimo veikla turėtų būti paleista automatiškai.
  • Spustelėkite mygtuką „Atlikti kai kurias konfigūracijas“ ir pasirodys skrudintuvas „Configuration Options“, patvirtinantis, kad ši sąveika sėkmingai užregistruota.
  • Įsivaizduokite, kad jūs pataisėte valdiklio nustatymus ir dabar esate pasiruošę įdėti jį į pagrindinį ekraną; paspauskite mygtuką Sukurti valdiklį, kad šis valdiklis turėtų būti sėkmingai sukurtas.

Galite atsisiųsti baigtą kolekcijos valdiklio projektą iš „GitHub“.

Apvyniojimas

Šiame straipsnyje sukūrėme slenkamą kolekcijos valdiklį, kuris duomenų rinkinį rodo pagrindiniame vartotojo ekrane.

Jei norite tęsti darbą su šiuo projektu, tada galite pabandyti pridėti savo kodą prie onUpdate () metodo, kad sukurtumėte valdiklį, kuris atnaujinamas su nauja informacija tokiu intervalu, kuris nurodytas jūsų „AppWidgetProviderInfo“ faile (kolekcija_widget_info).

Jei kuriate „Android“ valdiklį, būtinai pasidalykite savo kūriniais toliau pateiktuose komentaruose!

Vioje itemoje tamu režima greitai tampa viena iš prašomiauių programinė įrango funkcijų išmaniuoiuoe telefonuoe. Nor „Xiaomi“ gerbėjai ilgiauiai turėjo naudoti trečiųjų šalių tema, tačiau panašu, kad ...

Nepaiant daugybė galimų „Wear“ O galimybių, ji ir toliau atrodo kaip „Google“ pomėgi. Po daugiau nei penkerių metų rinkoje platforma atilieka nuo konkurentų pagrindinėe ritye, įkaitant akumuliatoriau ...

Paskutiniai Pranešimai