Нажмите "Enter", чтобы перейти к содержанию

Android widget beállítása

Eszközök az Androidon. Ritka jellemző, amelyben meg kell találnod

Szia, Hubr! A nevem Alexander Khakimov, én vagyok Android-fejlesztő Finch.

Olyan volt, hogy a design az IOS alatt volt, és az Android alatt kell alkalmazkodnia? Ha igen, akkor a tervezők gyakran használják a widgeteket? Sajnos a widget sok fejlesztő számára ritka eset, mert ritkán működik vele,

A cikkben részletesen megmondom, hogyan kell létrehozni egy widgetet, mit érdemes megfizetni a figyelmet és megosztani az ügyemet.

Widget létrehozása

Hozzon létre egy widgetet, amit tudnia kell:

  1. A widget komponenseinek jellemzői.
  2. A widget megjelenítésének jellemzői a képernyőn.
  3. A frissítési widget jellemzői.

Minden elemet külön elemezzünk.

A widget komponenseinek jellemzői

Ezzel a ponttal aláírja a fejlesztőt, aki legalább egyszer dolgozott a RemoteViews-szel. Ha ezek közül van, szabadon menjen a következő elemre.

A RemoteViews célja a hierarchiák nézeteinek leírása és kezelése, amely egy másik alkalmazás folyamatához tartozik. Hierarchia menedzsment használatával megváltoztathatja a nézethez tartozó tulajdonságokat vagy okokat, amely egy másik alkalmazás részét képezi. A RemoteView tartalmaz egy korlátozott készlet komponenseit a standard Android komponens könyvtár.widget.

A widgetek belsejében különálló folyamatban dolgoznak (szabályként ez egy kezdőképernyő), így a Broadcastreceiver kiterjesztés az UI widget — appwidgetprovider módosítására szolgál, amely alkalmazásunkban működik.

A widget megjelenítésének jellemzői a «Grid» képernyőn

Valójában ez az elem nem olyan bonyolult, ha hivatalos iránymutatásokat vizsgál:
Minden widgetnek meg kell határoznia a minimálisra és a minheight-ot, jelezve, hogy a minimális mennyiségű helynek alapértelmezés szerint kell lennie. Amikor a felhasználók hozzáadják a hozzáadást általában több, akkor általában elfoglalják, mint a megadott minimális szélesség és magasság. Az Android Home Screens kínálja a felhasználók számára a rendelkezésre álló terek rácsát, amelybe a widgeteket és az ikonokat. Ez a rács egy eszközzel változhat; Például számos kézibeszélő kínál 4×4 rácsot, és a tabletták nagyobb, 8×7-es rácsot kínálhatnak.
Oroszországba való átvitel: Minden widgetet be kell állítania minimális szélességét és magasságát, hogy kijelölje a minimális helyet, amelyet alapértelmezés szerint elfoglalnak.

A Widget beállítások példája Android Stúdióban

Az otthoni képernyőn hozzáadott widget általában több helyet foglal el, mint a megadott képernyő minimális szélessége és magassága. Az Android Home Screens biztosítja a felhasználók számára a rendelkezésre álló terek rácsát, ahol widgetek és ikonok találhatók. Ez a rács az eszköztől függően eltérő lehet; Például sok telefon kínál a 4×4 rácsot, és a tabletták nagy rácsokat kínálnak 8×7.

Ehhez világossá válik, hogy a készülék rácsja lehet, és a sejtek mérete eltérhet a háló méretétől függően. Ennek megfelelően a tartalom widgetet úgy kell megtervezni, hogy figyelembe vegyék ezeket a funkciókat.

A minimális szélessége és magassága a widget a megadott számú sorok és oszlopok lehet képlettel számítottuk ki:

MINSIDEIZTAP = 70 × N — 30, ahol n egy sor sorok vagy oszlopok sora

Jelenleg a maximális minimális háló, amelyet a 4×4. Ez biztosítja, hogy a widget minden eszközön megjelenjen.

A frissítési widget jellemzői

Mivel az appwidgetprovider természetesen a Broadcastreceiver kiterjesztése, vele együtt mindent megtesz, mint a szokásos BroadCastreceiver. Az AppwidgetProvider egyszerűen értelmezi a kapcsolódó szándékos mezőket, amelyet az onreceive és az extrákkal való elzáródási módszerek okozására szolgál.

A komplexitás a tartalomfrissítés gyakoriságával keletkezett — mind a helyzet a különbségben az iOS és az Android widgetjei belső munkájában. Az a tény, hogy az iOS-widgetekre vonatkozó adatok frissülnek, amikor a widget a felhasználó számára láthatóvá válik. Az Androidban ez az esemény nem létezik. Nem tudjuk megtudni, hogy a felhasználó látja a widget.

Az Android-widgetekhez az ajánlott frissítési mód az időzítő frissítése. Az időzítő beállításait az UpdatePeriodMillis widget paraméter állítja be. Sajnos ez a beállítás nem teszi lehetővé, hogy frissítse a widget gyakrabban, mint 30 perc alatt. Az alábbiakban elmondom róla.

Widget létrehozása

Továbbá az esetről van szó, amely Finch-ben volt egy nagy lottó alkalmazásban, a «stoloto», hogy részt vegyen az állami lottóban.

A kérelem feladata a lottó egyszerűsítése és megválasztása, valamint a jegy megvásárlása a felhasználó számára. Ezért a widget szükséges funkcionalitása meglehetősen egyszerű: a felhasználó által ajánlott játék megvásárlása és a megfelelő. A játékok listáját a kiszolgálón definiálják, és rendszeresen frissítik.

A mi esetünkben a widget tervezése két államot adott:

  • Egy meghatalmazott felhasználó számára
  • Jogosulatlan felhasználó számára

Meg kell mutatnia a felhatalmazott felhasználót, hogy megmutassa profiljának adatait: a belső pénztárca állapota, a várakozás várakozási jegyeinek száma és a nem teljesített nyeremények összege. Mindegyik elem esetében másoktól eltérő, a képernyőn belüli képernyőn.

Amint észreveheti, egy másik funkció a felhatalmazott felhasználó számára a «frissítés» gomb, de ez később.

Megvalósítása érdekében a kijelző a két állam, figyelembe véve a tervezés, szoktam Remoteadapter formájában végrehajtási RemoteViewSService generálni tartalom kártyák.

És most egy kis kód és hogyan működik mindenben. Ha már rendelkezik tapasztalattal egy widgetrel, akkor tudod, hogy a widget adatok frissítése az OnUpdate módszerből indul:

Frissítést írunk a widget minden példányához.

Frissítési adapter.

Szolgáltatásunk végrehajtását írjuk. Fontos, hogy meghatározzuk, hogy mely végrehajtás a RemotewieSservice felület.RemoteViewSfactory Használja a tartalom létrehozásához.

Valójában ez az adapteren vékony csomagolás. Neki köszönhetően adatainkat távoli gyűjtemény nézettel társíthatjuk. A RemotEviewSfactory az összes adatkészlet minden elemére szolgáló adatfolyam-generációs módszereket biztosítja. A tervezőnek nincs követelménye — mindent, amit teszek, ez megadja a kontextust.

Ezután néhány szó lesz az alapvető módszerekről:

  1. OnCreate — Adapter létrehozása.
  2. GetLoadingView — A módszer azt javasolja, hogy visszatérjen a nézetet, hogy a rendszer megmutatja jegyzék helyett tárgyakat, miközben jönnek létre. Ha itt nincs itt semmi, a rendszer néhány alapértelmezett nézetet használ.
  3. Getviewat — A módszer javasolja egy listaelemek létrehozását. Itt van a RemoteViews szabványos használata.
  4. Az OnDataschanged-t akkor hívják, ha a listában szereplő adatfrissítésre érkezett kérés. T.E. Ebben a módszerben előkészítjük a listára vonatkozó adatokat. A módszer éles, hosszú kódot végez.
  5. Az Ondestroy-t az adapter utolsó lista törlése során hívják (egy adapter használható több listán).
  6. RemoteViewCsFactory Eddig az életed listájának minden példánya, így az aktuális adatok listáját tárolhatjuk, például az aktuális Aétemek listáját.

Meghatározzuk az adatok listáját, amelyek megmutatják:

Adapter létrehozásakor indítsa el az adatok letöltését. Itt biztonságosan elvégezhet bármilyen nehéz feladatokat, beleértve a nyugodt, hogy a hálózatot blokkolja a patakot.

Ha parancsot hív az adatok frissítéséhez, hívja a FindwestraTasync ()

Innenedatasync, is, minden egyszerű. Tisztítsa meg az elemek aktuális listáját. Profil és játékadatok letöltése.

Itt érdekesebb

Mivel fontos számunkra, hogy csak egy meghatalmazott felhasználó profilját mutassa meg, akkor csak ebben az esetben letölteni kell a profiladatokat:

A WidgetProfile modell összegyűjtjük a különböző forrásokból származó, így a logika előállításukra és az alapértelmezett értékek vannak elhelyezve oly módon, hogy a negatív érték a pénztárca beszél helytelen adatokat vagy problémák a nyugtát.

Az üzleti logika esetében az adat-tárca hiánya kritikus, ezért helytelen pénztárca esetén a profil modell nem jön létre és hozzáadódik az elemek listájához.

UpdategratySync () használja a GetwidgetGamesinterActort, és hozzáad egy sor releváns a játék widget a widgetitems.

Mielőtt a kártyák előállítására költözött, fontolja meg többet a Modell WidgetItem. A Kotlin lezárt osztályon keresztül valósul meg, ami rugalmasabbá teszi a modellt, és kényelmesebb dolgozni.

Hozzon létre azonnali képeket, és határozza meg a válaszokat a fillinintenten keresztül

SetOnClickFillinIntentent módszer engedményesei megadott ViewID szándék, hogy kombinálható szülői pendingintent hogy meghatározzuk viselkedés, amikor kattintva NÉZET ezzel ViewID. Tehát képesek leszünk válaszolni a felhasználói kattintásokra WidgetProvider.

Kézi frissítés widget

A widgetünkhez a frissítési időt fél órán belül telepítették. Gyakran frissítheti, például a WorkManager-vel való táncon, de miért szállíthatja a hálózatot és az akkumulátort? Az ilyen fejlődés első szakaszában való viselkedése megfelelőnek tűnt.

Minden megváltozott, ha «Business» észrevette, hogy amikor a felhasználó a widgetre néz, megjeleníti az irreleváns adatokat: «Itt az iPhone-on, megnyitom a widget és a profilom legfrissebb adatait.

Banalna helyzete: iOS generál az új kártyát minden alkalommal, amikor mutatják a kütyü, mert erre van egy speciális képernyő és Android nem hasonló események a widget elvben. Figyelembe kellett vennem, hogy néhány lottó 15 percenként kerül megrendezésre, így a widgetnek aktuális információkat kell adnia — szeretne részt venni valamilyen könnyes, és már telt el.

Ahhoz, hogy kijusson ebből a kellemetlen helyzetből, és valahogy megoldja a problémát az adatok frissítésével, az idő tesztelt megoldás — a «Update» gomb megnyomásával valósult meg és valósult meg.

Adja hozzá ezt a gombot az elrendezéshez — egy lista elrendezéséhez, és az UpdateWidget hívásakor inicializálja a viselkedését

Az első munkavállalók szomorú képet mutattak: a «frissítés» gombra kattintva, mielőtt a tényleges frissítés néhány másodpercig áthaladhat. Bár a widget a mi alkalmazásunk által generálódik, valójában a rendszer hatalma, és kommunikál az alkalmazással a műsorszóráson keresztül.

T.E. Ha a widgetünk «frissítés» gombjára kattint, egy lánc kezdődik:

  1. Szerezzen szándékot az onreceive akció szolgáltatójában .
  2. Appwidgetmanager.Action_appwidget_update.
  3. Kihívás az OnUpdate-nél minden egyes intent-e widgetids-ben.
  4. Menjen az új adatokhoz.
  5. Frissítse a helyi adatokat és megjelenítse az új lista kártyákat.

Ennek eredményeként a widget frissítése nem tűnt nagyon szépnek, hiszen a gombra kattintva pár másodpercig ugyanazt a widgetre néztük. Nem világos, hogy az adatok frissültek-e. Hogyan oldja meg a vizuális válasz problémáját?

Először is, hozzáadtam az ISwidgetloading zászlót globális hozzáféréssel az interaktoron keresztül. A paraméter szerepe meglehetősen egyszerű — nem jeleníti meg a «Update» gombot, miközben betölti a widget adatokat.

Másodszor, az adatok betöltése a gyárban három szakaszra osztottam:

Start — Indítsa el a feltöltést. Ebben a szakaszban az összes működtető állapota és a globális letöltési zászló megváltoztatja a «betöltés» módosítását.

Közép — Fő adatok letöltési szakasz. A letöltés után a globális letöltési zászlót lefordítják a «feltöltött» állapotba, és a betöltött adatok megjelennek az adapterben.

A letöltés vége. Az adapter ebben a lépésben nem kell megváltoztatnia az adapter adatait. Ez a lépés a WidgetProvider megújítási szakaszának megfelelő feldolgozásához szükséges.

Lássuk többet arról, hogyan frissíthetjük a szolgáltató gombjának frissítését:

És most nézzük meg, mi történik az adapterben:

Logikai munka:

  1. A kezdő és a középső szakaszok végén hívom az UpdateWidgets módszert annak érdekében, hogy frissítse a szolgáltató által ellenőrzött nézet állapotát.
  2. A kezdési lépés végrehajtása után a felhasználó vizuálisan megjeleníti a «letöltés» a widget cellákban, és a középső szakasz kezdődik.
  3. Mielőtt felhívná az adapter adatfrissítését a középső lépésben, a szolgáltató eléri a «Update» gombot.
  4. A középső lépés végrehajtása után a felhasználó új adatokat jelenít meg, és a lépés vége megkezdődik.
  5. Mielőtt felhívná az adapter adatfrissítését, a lépés végén a Szolgáltató elrejti a «Update» gombot. A gyár szempontjából az összes adat releváns lesz, így a lépés vége megváltoztatja a LOADTSTEP értékének értékét.

Ezzel a megvalósítással kompromisszumot értek el az «üzleti» követelménye között, hogy az aktuális adatok widgetjén lássam, és a «húzza» frissítést túl gyakran.

Remélem, hogy a cikk hasznos volt az Ön számára. Ha tapasztalattal rendelkezel az Android widgets létrehozása, mondd el nekem a megjegyzésekben.

Sok szerencsét!

Комментарии закрыты, но обратные ссылки и pingbacks ещё работают.