Construirea unui widget personalizabil pentru Android Clock Clock

Dezvoltarea widget-urilor pentru platforma Android implică un set de sarcini ușor diferit de dezvoltarea standard a aplicațiilor. În această serie de tutoriale, vom lucra prin procesul de dezvoltare a unui widget personalizabil de ceas analogic. Ceasul va fi bazat pe clasa Android AnalogClock și personalizat cu grafica proprie.

Odată ce ceasul este adăugat la ecranul inițial al utilizatorului, acesta va fi actualizat în permanență pentru a afișa ora curentă. Vom defini proprietățile widgetului în XML, cu o clasă Java care extinde AppWidgetProvider pentru a gestiona actualizările. De asemenea, vom permite utilizatorului să configureze aspectul widgetului făcând clic pe acesta, cu o clasă de activitate care gestionează interacțiunea cu utilizatorul. După cum probabil ați observat, înregistrările Google Play pentru widget-uri au adesea ratinguri slabe și comentariile utilizatorilor care nu realizează un widget nu sunt lansate în același mod ca o aplicație obișnuită. Din acest motiv, și pentru a răspunde unor probleme cu dispozitive care rulează Android 4.0 (Ice Cream Sandwich), vom include, de asemenea, o activitate de lansare informativă pentru aplicația widget. De asemenea, vom specifica aspectul și diferitele resurse de aplicație din XML.

Această serie de tutorial despre construirea unui widget personalizabil pentru ceasul Android este în patru părți:

  • Android Widget Configurare proiect
  • Proiectarea ceasului
  • Primirea actualizărilor și lansarea
  • Implementarea configurării utilizatorilor

Iată o imagine a rezultatului final cu afișarea implicită (adică înainte de personalizarea utilizatorului):

În această primă parte a seriei, vom configura proiectul nostru widget, vom adăuga elementele necesare în fișierul Manifest și vom crea fișierul de resurse XML care va defini proprietățile de bază ale widget-ului. Acest tutorial inițial implică doar câțiva pași, dar înțelegerea fiecăruia este vitală pentru a învăța esențialele dezvoltării widget-urilor.


Pasul 1: Începeți un proiect Widget Android

Dacă ați creat numai aplicații standard Android în trecut, crearea unui proiect widget este puțin diferită. Începeți proiectul în Eclipse în modul obișnuit, alegeți "Fișier", "Nou" și apoi "Proiect". Selectați "Android Project" din listă și apoi apăsați "Next". În fereastra "New Android Project", introduceți numele pe care doriți să îl utilizați pentru proiectul dvs. widget și faceți clic pe "Next".

Selectați o destinație de construire pentru aplicația dvs. și faceți clic pe "Următorul". Vizăm Android 4.0, care este nivelul 14 al API-ului.

În fereastra Info despre aplicație, introduceți numele pachetului. Când dezvoltați o aplicație widget, nu este nevoie să creați o Activitate, astfel încât să puteți debifa eventual secțiunea "Creați activitate". Cu toate acestea, vom include o activitate pentru a furniza informații despre utilizarea widget-ului, astfel încât vom lăsa Eclipse să creeze activitatea pentru moment. Puteți modifica SDK-ul minim aici sau opțional modificați-l în fișierul Manifest.

Dați clic pe "Finalizați", iar Eclipse vă va construi proiectul.


Pasul 2: Editați Manifestul de proiect

Deschideți fișierul Manifest proiect - ar trebui salvat ca "AndroidManifest.xml" în dosarul proiectului, vizibil în cadrul pachetului Explorer. Faceți dublu clic pentru ao deschide, apoi selectați fila "AndroidManifest.xml", astfel încât să puteți edita direct codul XML.

Dacă nu ați modificat SDK-ul minim atunci când ați creat proiectul, dar doriți să faceți acest lucru acum, puteți modifica elementul "uses-sdk" ca în exemplul următor:

 

Pe lângă specificarea SDK minimă aici, indicăm și SDK-ul țintă. Prin direcționarea la nivelul 14, putem folosi spațiul automat de margine dintre widget-uri care apare pe dispozitive care rulează Ice Cream Sandwich.

În acest moment, ați putea edita secțiunea principală a Activității Manifestului dacă nu doriți să utilizați o activitate de lansare. Totuși, vom lăsa această secțiune așa cum este. Există două motive pentru a face acest lucru:

  • Când utilizatorii descarcă un widget prin Google Play, ei încearcă instinctiv să o deschidă, uitând sau ignorând faptul că aplicațiile widget nu sunt lansate în mod normal, ci sunt adăugate pe ecranul inițial. Când se întâmplă acest lucru, putem folosi activitatea de lansare principală Activitate pentru a afișa un text puțin informativ care explică modul de adăugare a widgetului - preamesterea oricăror comentarii sau evaluări negative de la utilizatori confuzi.
  • Există o problemă cu widget-uri care rulează pe Android 4.0, care uneori împiedică utilizatorii să poată adăuga noi widgeturi pe ecranele lor. În 4.0, utilizatorii adaugă widget-uri deschizând meniul dispozitivului, selectând fila Widget, găsind widget-ul enumerat acolo, apoi apăsând să-l ții apăsat, lăsându-l pe ecranul inițial. Cu toate acestea, în unele cazuri, un widget nou nu apare în fila Widget - în mod normal acest lucru este rezolvat atunci când dispozitivul este repornit, dar poate provoca, desigur, confuzie și poate împiedica utilizarea aplicației. Oferirea unei activități de lansare împiedică această problemă.

După eticheta Activitate de închidere, dar în interiorul elementului Application, adăugați un alt element de activitate pentru ecranul pe care îl vom include pentru a permite utilizatorilor să aleagă un stil de ceas personalizat:

  

Activitatea va fi numită "ClockChoice" și vom adăuga la proiect în Partea 4. După noul element de activitate, adăugați un element Receptor la Manifest după cum urmează:

  

Aici indicăm clasa care va gestiona actualizările widget-ului, care va fi "ClockWidget" și va extinde AppWidgetProvider. În interiorul acestui element Receptor, între etichetele sale de deschidere și de închidere, adăugați un Filtru interactiv după cum urmează:

   

Aceasta specifică faptul că widgetul va primi actualizări. În cele din urmă, încă în interiorul elementului Receiver, adăugați un element metadata:

 

Aici specificăm un fișier XML în care vom declara proprietățile de bază ale widgetului, utilizând atributul name pentru a indica faptul că acest fișier conține date pentru un AppWidgetProvider. Salvați fișierul Manifest - nu vă faceți griji dacă vedeți o eroare deoarece resursa XML nu poate fi găsită, o vom crea în continuare.


Pasul 3: Definirea proprietăților widgetului

Să creați acum resursa XML pe care am specificat-o în Manifest. Proprietățile widgetului vor fi definite în acest fișier. În directorul de resurse al proiectului, adăugați un nou director numit "xml" dacă nu există deja unul acolo. Faceți clic dreapta pe dosarul "res" (sau selectați-l și selectați "File"), selectați "New" apoi "Folder" și introduceți "xml" ca nume de folder înainte de a da clic pe "Finish".

Acum creați un fișier nou în acest folder făcând clic dreapta pe el (sau selectând-l și selectând "Fișier"), alegeți "New" apoi "File" și introduceți "clock_widget.xml" pentru a se potrivi cu numele pe care l- element de date.

Faceți clic pe "Finalizare" pentru a crea fișierul - nu vă faceți griji în legătură cu eventualele erori, ele vor dispărea atunci când adăugăm codul nostru XML.

Fișierul dvs. ar trebui să se deschidă automat în Eclipse. Selectați fila "clock_widget.xml" pentru a edita codul.

Widgetul XML are nevoie doar de un singur element XML - adăugați-l după cum urmează:

 

Atributele elementului de aici sunt oasele oricărei aplicații widget. Mai întâi, definim lățimea și înălțimea minimă pentru widgetul ceas, așa cum va apărea pe ecranul utilizatorului. Utilizăm pixeli independenți de densitate pentru a permite sistemului Android să facă față variațiilor densității ecranului. Când se calculează dimensiunea unui widget, multiplicați numărul de celule pe fiecare axă cu 74, apoi scade 2 din rezultat. Vrem widget-ul ceasului să fie de 2 celule lățime și 2 celule în înălțime, astfel încât înălțimea minimă și lățimea sunt ambele 146.

Valoarea perioadei de actualizare determină cât de des va fi actualizată aplicația widget. Pe măsură ce folosim Android AnalogClock ca bază pentru widget-ul nostru, nu trebuie să ne îngrijorăm prea mult despre această valoare și putem furniza zero. Când dezvoltați widget-uri pe care intenționați să le actualizați în cadrul propriului cod de aplicație, este posibil să fie necesar să furnizați aici o valoare diferită. Dacă utilizați această valoare pentru a determina perioada de actualizare, cele mai frecvente actualizări vor apărea la fiecare 30 de minute. Cu toate acestea, puteți oferi actualizări mai frecvente dacă utilizați un dispozitiv AlarmManager în aplicația dvs..

În cele din urmă, indicăm aspectul inițial al widget-ului, denumind un fișier de aspect, pe care îl vom adăuga la proiect în tutorialul următor - nu vă faceți griji în legătură cu erorile de afișare a erorilor între timp. Există alte atribute pe care le puteți include în elementul "furnizor de aplicații" dacă doriți, cum ar fi o imagine de previzualizare pe care utilizatorii să o poată vedea înainte de a adăuga widget-ul - dacă nu oferiți o previzualizare, utilizatorii vor vedea pictograma aplicației în widget sau meniu.


Pasul 4: adăugați valori la proiect

Pasul final de pregătire pentru widgetul de ceas privește resursele de valoare ale aplicației. Eclipse ar fi trebuit să creeze un dosar "values" în folderul "res" pentru proiectul dvs., cu fișierul XML Strings inclus deja. Vom adăuga un alt dosar cu valori specific pentru API-urile Android începând cu 14 ani. Acest lucru ne va permite să adaptăm anumite aspecte ale widget-ului la acele niveluri API, în special la String-urile care apar în interfață și la valorile de dimensiune pe care le folosim pentru a aplica margini afișării widgetului.

Creați un nou director în directorul "res" făcând clic pe el (sau selectând-l și selectând "Fișier"), selectând "New", "Folder" și introducând "valori -v14" înainte de a da clic pe "Finish".

Deschideți fișierul Strings XML din dosarul principal de valori și selectați fila "strings.xml" pentru a vizualiza codul.

Mai întâi editați numele de aplicație String la ceva mai ușor de citit, după cum urmează:

 Ceas widget personalizat

Apoi, editați stringul "hello" pentru a oferi instrucțiuni:

  Bună ziua \ n \ n Vă mulțumim pentru instalarea Widgetului personalizat pentru ceasuri. \ N \ n Trebuie să adăugați widget-ul pe ecranul de pornire pentru al utiliza. Apăsați lung ecranul de pornire și selectați widgetul din lista celor instalate pe dispozitiv. 

Acesta este textul informativ pe care îl vom afișa dacă utilizatorul lansează sau deschide aplicația după ce a instalat aplicația. Desigur, puteți edita acest text în orice fel doriți. Întrucât procesul de adăugare a widgeturilor este diferit pentru dispozitive care rulează Android 4.0 și mai sus, vom folosi un String ușor diferit pentru a viza acei utilizatori. Salvați fișierul principal de fișiere XML, apoi copiați-l și inserați-l în dosarul "values-v14". Pentru copiere, faceți clic dreapta pe fișierul "strings.xml" din dosarul "values" (sau selectați-l și alegeți "Edit"), apoi selectați "Copy". Pentru a lipi, faceți clic dreapta pe "valori-v14" (sau selectați-l și alegeți "Editați") și selectați "Lipire". Acum, deschideți versiunea fișierului XML de fișiere în dosarul "values-v14". Editați stringul "hello" în această nouă copie a fișierului pentru a se potrivi utilizatorilor pe Android 4.0 plus:

  Bună ziua \ n \ n Vă mulțumim pentru instalarea widgetului Ceas personalizat. Trebuie să adăugați widgetul în ecranul de pornire pentru al utiliza. Selectați fila Widget din meniul aplicației pentru dispozitive. Când găsiți widgetul pentru ceas, apăsați și țineți apăsat pe acesta, lăsându-l pentru a adăuga pe ecran. 

Acum fiecare utilizator va vedea un String informativ care este relevant pentru propriul dispozitiv. Vom include aceste șiruri atunci când vom crea planul de lansare a activității. Mai târziu, vom adăuga un alt fișier în fiecare dosar de valori, dar acesta este tot ceea ce avem nevoie de acum.


Data viitoare

Am realizat acum sarcinile de configurare pentru widget, așa că suntem pregătiți să implementăm designul ceasului, pe care îl vom face în următorul tutorial. Aceasta va implica crearea de fișiere XML de formatare extensibilă pentru afișarea activității widget și a lansatorului. În Partea 3, vom gestiona primirea de actualizări pentru ceas și implementarea activității de lansare. În Partea 4, vom adăuga abilitatea utilizatorilor de a alege o opțiune de afișare a ceasului când faceți clic pe widget.

Cod