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.
Până acum, în această serie, privind dezvoltarea unui widget personalizat pentru ceasul analogic pentru Android, am stabilit proiectul și am creat elementele principale de design. În această parte, vom implementa clasa widget Java, gestionând actualizările și, de asemenea, lansând aplicația. Vom lucra la două clase Java, una care extinde clasa AppWidgetProvider, iar cealaltă o clasă de activitate care va începe în cazul în care utilizatorul încearcă să lanseze aplicația. Vom lucra, de asemenea, la fișierul de aspect pentru activitatea de lansare. După acest tutorial, veți avea un widget ceas de funcționare, care va fi actualizat în permanență pentru a reflecta ora curentă.
În partea finală a seriei vom permite utilizatorului să facă o alegere din alegerea modelelor ceasului pe care le-am creat ultima oară.
Aceasta este Partea a 3-a din seria noastră despre Construirea unui widget personalizabil pentru ceas Android cu ajutorul a patru tutoriale:
Aplicațiile Widget extind clasa AppWidgetProvider în Android, deci asta vom face aici. În această clasă puteți oferi pași de procesare pentru actualizarea widget-ului pe măsură ce acesta rulează pe ecranul de start al utilizatorului. Activitatea noastră de lansare va utiliza fișierul principal de aspect XML pentru a afișa o resursă String definită în primul tutorial. În acest tutorial, vom acoperi, de asemenea, folosind iconițe lansatoare (și opțional previzualizare) pentru aplicația widget.
Ați putea aminti că în primul tutorial am decis să includeți o activitate de lansare în cadrul aplicației widget. Aceasta nu este o necesitate, ci oferă câteva avantaje. Utilizatorii care nu știu cum să lanseze o aplicație widget vor vedea instrucțiuni despre lansarea acesteia. De asemenea, dispozitivele care rulează Android 4.0 uneori nu reușesc să includă noi aplicații widget în meniu, dar oferă o lansare Activitatea pare să ocolească această problemă.
Când ați creat proiectul în Eclipse, dacă ați specificat o activitate inițială pentru aplicație, Eclipse ar fi trebuit să creeze o clasă Java pentru aceasta. Folosind pașii impliciți descriși în Partea 1, ar trebui să aveți o clasă Java în pachetul de proiect numit "CustomClockWidgetActivity" sau un nume alternativ dacă l-ați modificat. Deschideți acest lucru în Eclipse - ar trebui să conțină următoarea schiță:
// numele pachetului import android.app.Activity; import android.os.Bundle; clasa publică CustomClockWidgetActivity extinde Activitatea / ** Chemată când activitatea este creată pentru prima dată. * / @Override publică void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.main);
Dacă Eclipse nu a creat clasa, creați-o acum și adăugați codul, modificând numele clasei, dacă este necesar. Putem folosi de fapt comportamentul implicit al acestei clase de activitate principală și lăsăm codul așa cum este. Observați că codul specifică aspectul principal XML pentru vizualizarea conținutului acestuia. Vom modifica fișierul principal de aspect XML în funcție de detaliile aplicației widget.
Activitatea ar trebui să fie deja inclusă în fișierul Manifest al proiectului, după cum urmează:
Aici indicăm faptul că această activitate ar trebui să înceapă la lansarea aplicației. Acesta este modul în care o activitate de lansare este listată în Manifest pentru o aplicație standard (non-widget). Deși widgetul nostru rulează în general prin adăugarea la ecranul de start al utilizatorului, oferim o activitate de lansare pentru motivele menționate mai sus.
Deschideți fișierul principal de aspect XML: "res / layout / main.xml". Eclipse ar fi trebuit să fi creat acest fișier când ați creat proiectul. Majoritatea acestui fișier poate fi lăsat cu codul implicit, dar dorim să adăugăm următorul atribut elementului TextView pentru o lizibilitate îmbunătățită:
Android: padding = "10dp"
Fișierul principal de aspect XML ar trebui să apară acum după cum urmează:
Aspectul afișează pur și simplu textul "hello" String pe care l-am editat în Partea 1 din această serie. String-ul instruiește utilizatorul în ceea ce privește modul de adăugare a widget-ului pe ecranul lor inițial. Amintiți-vă că am inclus două versiuni ale String-ului, unul în dosarul "values" și unul în folderul "values-v14", astfel încât să putem adapta instrucțiunile la versiunea Android pe care utilizatorul le-a instalat.
Cu o aplicație widget, pictograma lansator apare în listele de aplicații. În cazul nostru, acesta va apărea, de asemenea, în meniul principal al dispozitivului utilizatorului deoarece am oferit o activitate de lansare. Puteți crea o imagine de previzualizare pentru widget-ul dvs., dacă nu doriți, pictograma lansatorului va apărea în previzualizările widget-urilor. Pentru utilizatorii care rulează Android 4.0 și ulterior, widget-urile sunt adăugate din fila Widget din meniul dispozitivului. În această secțiune a meniului, apare imaginea de previzualizare sau va apărea pictograma lansatorului dacă nu a fost furnizată nicio previzualizare. Pe nivelurile API anterioare, previzualizarea sau pictograma apare în butonul de selectare a widget-ului, după ce apăsați lung pe ecranul inițial.
Pentru widget-ul ceasului nostru vom folosi doar o pictogramă de lansator, deci creați-vă acum - puteți utiliza următorul set dacă nu doriți să creați design-ul dvs.:
Utilizați următorul ghid de dimensiuni maxim pentru pictogramele dvs. la fiecare densitate:
Dacă utilizați numele de fișier "ic_launcher" pentru pictograma dvs. de lansator, nu trebuie să modificați niciunul din cod ca instrumente implicite pentru acest nume. Verificați dacă proiectul dvs. utilizează într-adevăr acest nume deschizând fișierul Manifest și verificând atributul icon al elementului de aplicație, care trebuie să apară după cum urmează:
android: icon = "@ drawable / ic_launcher"
Dacă nu apare în acest fel, modificați codul pentru a se potrivi cu numele pe care doriți să îl utilizați pentru pictograma lansatorului dvs. Salvați copii ale pictogramei din fiecare folder desenat, amintiți-vă că utilizați același nume în fiecare dosar (dar conținutul imaginii cu dimensiuni variate pentru fiecare densitate). Dacă creați propriile pictograme de lansare, încercați să vă asigurați că ele reflectă aspectul și funcția widget-ului pentru ceas, astfel încât utilizatorii să facă intuitiv legătura dintre pictogramă și widget.
Dacă doriți să creați imagini de previzualizare pentru aplicațiile dvs. widget, puteți utiliza aplicația Previzualizare widget. Rulați o aplicație widget pe un AVD în Eclipse (pentru widget-ul ceasului puteți să o faceți la sfârșitul acestui tutorial sau la următoarea) - asigurați-vă că AVD-ul dvs. are alocat un spațiu de stocare SD card. Deschideți meniul dispozitivului emulator și selectați aplicația Previzualizare widget. Alegeți widget-ul din listă. După ce apare imaginea widgetului dvs., faceți clic pe "Faceți Snapshot" pentru a captura o previzualizare.
Apoi puteți salva previzualizarea direct pe computerul dvs. din interiorul Eclipse. Pentru a face acest lucru, deschideți perspectiva DDMS, selectați emulatorul în ecranul Dispozitive și căutați în imagine în vizualizarea File Explorer (vizualizați directorul Descărcare de pe cardul SD). Selectați fișierul imagine preview și faceți clic pe butonul "Trageți un fișier de pe dispozitiv" pentru a salva imaginea în sistemul de fișiere local.
Odată ce ați realizat imaginea de previzualizare, copiați-o în folderul (proiectele) care poate fi desenat și afișați numele acestuia în fișierul de proprietăți "res / xml" "appwidget-provider", alături de dimensiunile, următorul atribut:
android: previewImage = "@ drawable / clock_preview"
Acest lucru se va aplica unui fișier imagine denumit, de exemplu, "clock_preview.png" salvat în fiecare folder desenabil relevant.
Acum, hai să ne întoarcem la clasa Java pentru widget-ul ceasului nostru. Rețineți că în proiectul Manifest am inclus un element receptor care indică o clasă numită "ClockWidget" - vom crea acest lucru în continuare. Ia-ți un moment să te uiți înapoi la Manifest, înainte de a-ți implementa clasa. Observați că elementul receptor include acțiunea "APPWIDGET_UPDATE" și specifică metadatele care conțin fișierul XML "clock_widget" în care am definit proprietățile widgetului de bază.
Creați-vă clasa widget acum, făcând clic dreapta sau selectând pachetul principal de aplicații din directorul "src" și selectând "File" apoi "New", "Class" - introduceți "ClockWidget" pentru a se potrivi cu numele din Manifest. Eclipse ar trebui să deschidă noul fișier de clasă. Extindeți linia de declarație a clasei de deschidere după cum urmează:
clasa publica ClockWidget extinde AppWidgetProvider
Va trebui să adăugați următoarea instrucțiune de import deasupra acestei linii în partea de sus a clasei:
import șiroid.appwidget.AppWidgetProvider;
Adăugați o variabilă de instanță în declarația de clasă după cum urmează:
Vizualizări RemoteViews;
Acest lucru ne va permite să ne referim la interfața utilizator / elemente vizibile pentru widget, care necesită un proces ușor diferit în clasele de widgeturi decât în clasele de activitate. Viziunile la distanță ne permit să ne referim la aspectul widgetului și la vizualizările din acesta. Acest lucru este esențial atunci când actualizați și furnizați funcții interactive pentru widget. Veți avea nevoie de o altă declarație de import:
importă android.widget.RemoteViews;
Apoi, adăugați schița metodei "onReceive" în interiorul clasei după cum urmează:
public void onReceive (Contextul contextului, intenția intenției)
AppWidgetProvider moștenește această metodă din clasa BroadcastReceiver. În tutorialul următor, vom folosi această metodă pentru a gestiona clicurile pe widget-ul ceasului. Pentru moment, tot ce trebuie să facem este să instruim Android să actualizeze aspectul widgetului atunci când metoda se execută. Adăugați mai întâi următoarele declarații de import:
importați android.content.Context; import șiroid.content.Intent;
În cadrul metodei "onReceive", includeți un test condițional pentru a verifica dacă metoda rulează deoarece widgetul se dorește să se actualizeze:
// afla acțiunea String action = intent.getAction (); // este momentul să actualizăm dacă (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals (action))
Adăugați o altă declarație de import:
import șiroid.appwidget.AppWidgetManager;
În cadrul instrucțiunii "if", preluați vizualizările la distanță pentru aspectul widgetului nostru, instanțiând variabila de instanță pe care am creat-o după cum urmează:
views = noi RemoteViews (context.getPackageName (), R.layout.clock_widget_layout);
Observați că folosim obiectul Context trecut la metoda "onReceive" pentru a prelua numele pachetului. Specificăm fișierul de aspect widget pentru ceas la care am lucrat în ultimul tutorial - dacă ați folosit un nume de fișier diferit, modificați acest cod pentru al reflecta. Acum, actualizați widgetul adăugând următorul cod, încă în interiorul instrucțiunii "if":
AppWidgetManager.getInstance (context) .updateAppWidget (intent.getIntArrayExtra (AppWidgetManager.EXTRA_APPWIDGET_IDS), vizualizări);
Aici folosim AppWidgetManager pentru a apela actualizarea, trecând obiectul Obiectele la distanță ca referință. Acum puteți rula aplicația widget pentru a vedea aspectul și comportamentul implicit. Când aplicația este inițial instalată / lansată, programul de lansare are loc:
Activitatea de lansare este pur informativă, deci este, în general, cel mai bine să o păstrați simplu, cu excepția cazului în care aveți în vedere alt scop în acest sens. În afară de asta, puteți să vă modificați aspectul în orice fel doriți. Următoarele imagini afișează widget-ul adăugat din meniul dispozitivului utilizator pe Icewave Sandwich:
Rețineți că pictograma lansator apare în meniul Widget - dacă includeți o imagine de previzualizare și o listați în XML widgetul dvs., acesta va apărea aici. În cele din urmă, widget-ul de ceas rulează utilizând designul său implicit:
Elementele de bază ale widgetului Ceas Analog sunt acum completate. În următoarea și ultima parte a seriei tutorial, vom implementa permițând utilizatorului să aleagă un design ceas. Designul ceasului implicit este afișat momentan, deoarece în ultimul tutorial am setat celelalte modele să fie invizibile. Ne vom ocupa de clicurile utilizatorilor pe widget prin adăugarea de funcții în clasa widget. Vom folosi, de asemenea, o nouă activitate pentru a afișa utilizatorului selecția ceasurilor, detectând care dintre acestea aleg și actualizând aspectul widgetului în consecință. În cele din urmă, vom folosi aplicația Preferințe partajate pentru a stoca o înregistrare a designului widgetului selectat de utilizator, făcându-l personalizabil.