Download ANDROID-PROGRAMMING PDF

TitleANDROID-PROGRAMMING
File Size7.0 MB
Total Pages104
Document Text Contents
Page 1

Approfondimenti tematici

Il corso completo per imparare
a programmare con il S.O. Google

dedicato agli smartphone

Android
PROGRAMMING

Page 2

Questo approfondimento tematico è pensato per
chi vuol imparare a programmare e creare software
per gli smartphone con sistema operativo Google
Android. La prima parte del testo guida il lettore alla
conoscenza degli strumenti necessari per sviluppare
sulla piattaforma mobile di Mountain View (installa-
zione SDK, librerie e tool di supporto allo sviluppo).
Le sezioni successive sono pensate per un apprendi-
mento pratico basato su esempi di progetto: dialogo
e interazione con l’ambiente operativo del telefo-
nino, interazione con gli utenti, componenti di un
widget, interfacce in XML, gestione del touch, proget-
tazione dei menu e via dicendo.
Una serie di esempi pratici da seguire passo passo
che spingono il lettore a sperimentare sul campo
il proprio livello di apprendimento e lo invitano a
imparare divertendosi.

Android
programming

Page 52

Android programming 52

Android programming Android: l’utilizzo di temi e stiliMOBILE Android: l’utilizzo di temi e stili

http://www.ioprogrammo.it 54 / Luglio 2010

P
er tutta la durata di questo corso, abbiamo
più volte rimarcato come Android spicchi tra
gli altri sistemi mobili per la modernità dei

suoi concetti e per la tipologia dei suoi strumenti,
soprattutto per quel che riguarda il design delle
interfacce utente. Realizzare una UI per Android,
infatti, è un’operazione che ricorda più il design di
una pagina Web che non la costruzione di un’ap-
plicazione a finestre su un sistema desktop. Grazie
al linguaggio di layout basato su XML, in Android
ogni widget dell’interfaccia può essere velocemen-
te espresso e configurato. Tra le tante cose che
Android permette, c’è anche la possibilità di inter-
venire sull’aspetto di ciascun widget, modifican-
done ad esempio il colore, i bordi, lo stile del testo,
l’immagine di sfondo e così via. Oggi ci concen-
treremo proprio su questo aspetto, introducendo i
concetti di stile e tema.

BISOGNA AVERE STILE!
Nel gergo di Android (e non solo), uno stile è un
insieme di proprietà che possono essere applicate
ad un widget per modificarne l’aspetto esteriore. Ci
è già capitato di utilizzare delle proprietà di stile in
alcuni dei codici studiati durante gli appuntamenti
precedenti. Per andare dritti al punto, prendiamo
in esempio il caso di un componente TextView così
definito:

<TextView

android:layout_width=”fill_parent”

android:layout_height=”wrap_content”

android:text=”@string/message”

android:textStyle=”bold|italic”

android:textColor=”#FFFF00”

android:textSize=”20sp”

android:typeface=”monospace”

android:padding=”10dp” />

Questa etichetta di testo ricorre a diverse proprietà
di stile. Nello specifico, si richiede esplicitamente

che il testo sia grassetto e corsivo (con la proprietà
textStyle), di colore giallo (textColor), grande 20
punti (textSize), con un font a spaziatura fissa (type-
face) e distanziato di 10 punti dai bordi del widget
(padding). Tutte queste proprietà potrebbero essere
espresse anche con del codice Java, ma natural-
mente in XML è molto più semplice configurare
lo stile di un widget. Utilizzando Eclipse, poi, lo è
ancora di più, visto che si possono utilizzare le pro-
cedure guidate messe a disposizione dal plug-in per
lo sviluppo Android.

Supponiamo ora di voler sviluppare un’applica-
zione che faccia uso di diverse decine di compo-
nenti TextView come quello appena dimostrato.
A livello di XML, magari aiutandoci con un po’
di copia-incolla, potremmo naturalmente definire
tanti widget tutti uguali, semplicemente replicando
su ognuno di essi le medesime proprietà di stile.
Come soluzione funziona, però non è il massimo
della convenienza. Anzitutto ci sono un sacco di
definizioni duplicate, e questo già di per sé non è un
buon inizio. La cosa peggiore, però, è che diventa
più difficile mantenere omogeneo lo stile di tutta
l’applicazione. Facciamo ad esempio il caso che
il cliente che ci ha commissionato l’applicazione,
dopo averla vista, ci dice “mi sa che ho cambiato
idea e che le scritte adesso le voglio verdi e un po’
più grosse”. In questo caso dovremmo tornare a
lavorare su tutti gli XML, ricercando ogni occorren-
za di TextView e andando a correggere le proprietà.
Poi bisognerebbe riverificare ciascuna schermata
per essere sicuri di non aver commesso errori.
Insomma, in fin dei conti quel copia-incolla iniziale

Fig. 1: Un componente TextView personalizzato nelle sue
proprietà di stile

REQUISITI

Conoscenze richieste
Basi di Java

Software
Java SDK (JDK) 5+,
Android SDK, Eclipse
3.3+, ADT

Impegno

Tempo di realizzazione

❑ CD ❑ WEB
android_10.rar

cdrom.ioprogrammo.it

UN’APPLICAZIONE
CON STILE
IL DESIGN È UNO DEI FATTORI PIÙ IMPORTANTI IN AMBITO MOBILE. NON È SUFFICIENTE
CHE UN’APPLICAZIONE FUNZIONI: DEVE ANCHE ESSERE ELEGANTE E GRADEVOLE ALLA
VISTA. PER QUESTO OGGI SCOPRIREMO COME GESTIRE IL LOOK DELLE APPLICAZIONI

Page 53

53 Android programming

Android programmingAndroid: l’utilizzo di temi e stili MOBILEAndroid: l’utilizzo di temi e stili

Luglio 2010 / 55 http://www.ioprogrammo.it

NOTA

FILE CONSIGLIATI
Stili e temi, come si è
visto, vanno definiti in file
XML di tipo resources, da
posizionare al percorso
/res/values (o varianti). Non
ci sono vincoli sui nomi
dei file XML posizionabili
a questo percorso, e per-
tanto potete crearne quanti
ne volete e con i nomi che
più desiderate. Potete met-
tere uno stile in ogni file,
oppure fare un solo file con
tutti gli stili della vostra
applicazione. Per Android,
in fin dei conti, è la stessa
cosa. La maggior parte
degli sviluppatori della
comunità Android, ad ogni
modo, preferisce usare un
unico file styles.xml per gli
stili ed un unico file the-
mes.xml per i temi. Spesso
risulta conveniente seguire
questa convenzione.

potrebbe costarci parecchia fatica in futuro.
Per questo motivo Android mette a disposizione
uno speciale costrutto XML che permette di definire
gli stili come delle entità indipendenti, slegate cioè
dal widget o dai widget cui sono applicate. Gli stili
possono essere definiti negli XML di tipo resources,
come già siamo abituati a fare con le stringhe. La
cartella di progetto da utilizzare, quindi, è “res/
values” (o una delle sue varianti) e il modello da
seguire è il seguente:

<?xml version=”1.0” encoding=”utf-8”?>

<resources>

<style name=”textViewStyle01”>

<item name=”android:textStyle”>bold|italic</

item>

<item name=”android:textColor”>#FFFF00</item>

<item name=”android:textSize”>20sp</item>

<item name=”android:typeface”>monospace</

item>

<item name=”android:padding”>10dp</item>

</style>

</resources>

I singoli <item> rappresentano le proprietà che
entrano a far parte dello stile. Nomi e valori, come
è possibile osservare, devono essere ricavati dagli
attributi dei widget e dai valori che è possibile attri-
buire a questi ultimi.
In un singolo file di risorse, naturalmente, posso-
no essere definiti più stili, usando più occorrenze
del tag <style>. Ciascuno stile deve avere un nome
univoco. Il nome possiamo stabilirlo noi come
meglio preferiamo, certamente facendo in modo
che sia significativo nel nostro caso specifico. Nel
caso appena mostrato, ad esempio, si sta preparan-
do uno stile che si intende applicare a dei widget
TextView. Per questo si è scelto di chiamarlo text-
ViewStyle01. Il nome potrà successivamente essere
impiegato per richiamare lo stile. Il modello da
seguire in Java sarà:

R.style.textViewStyle01

Mentre in XML sarà:

@style/textViewStyle01

Una volta pronto, lo stile può essere applicato ad
un widget qualsiasi attraverso il suo attributo style.
Ad esempio:

<TextView

android:layout_width=”fill_parent”

android:layout_height=”wrap_content”

android:text=”@string/message”

style=”@style/textViewStyle01” />

Questo TextView, una volta caricato in un’attività,
apparirà identico a quello dimostrato in apertura
di paragrafo. Adesso, però, è possibile realizzarne
a iosa senza dover fare copia-incolla degli attributi
di stile: basterà applicare a tutti lo stile textViewSt-
yle01, e tutti i testi appariranno gialli e in grassetto.
La richiesta del cliente di cambiare le dimensioni
ed il colore del testo, adesso, potranno essere sod-
disfatte nel giro di un minuto, modificando un solo
file XML, cioè quello che contiene la definizione
dello stile.

EREDITÀ NEGLI STILI
Chi di voi conosce il Web design, l’HTML ed i CSS
si starà sicuramente trovando a proprio agio. Il
modello di gestione degli stili di Android, infatti,
ha fatto tesoro dell’esperienza del Web. Dai fogli di
stile CSS, infatti, riprende anche un’altra caratte-
ristica: l’ereditarietà. Cerchiamo di capire insieme
cosa significhi e quali vantaggi comporti.
Torniamo all’esempio del cliente petulante del
paragrafo precedente. Nell’applicazione che stiamo
realizzando per lui abbiamo fatto uso di numerosi
oggetti TextView. Stando alla specifica iniziale del
software, il testo in questi componenti deve appa-
rire giallo e di una certa dimensione. Così abbiamo
definito uno stile e lo abbiamo applicato ad ogni
occorrenza del widget TextView. Il cliente, succes-
sivamente, ci ha chiesto delle modifiche, che noi
siamo stati in grado di apportare istantaneamente
modificando lo stile applicato al testo. La soddi-
sfazione del cliente è stata enorme nel constatare
quanto fossimo veloci ed efficienti nell’applicare la
modifica richiesta. Per questo, il cliente ci ha preso
gusto... Girovagando tra le schermate dell’applica-
zione, adesso gli è venuto in mente che alcune delle
scritte che abbiamo modificato – solo alcune, però,
non tutte – dovrebbero essere un po’ più piccole, ed
inoltre andrebbero allineate al centro dello scher-
mo invece che a sinistra. Contiamo fino a dieci,
sfoggiamo un sorriso compiacente, annuiamo, e
mettiamoci a lavoro.
Abbiamo diverse possibilità. Naturalmente non
possiamo modificare lo stile textViewStyle01, perché
questo significherebbe modificare tutti i TextView
che ne fanno uso, e non solo quelle poche unità
indicate dal cliente. Potremmo allora raggiungere
ogni occorrenza di TextView da modificare, sgan-
ciarla dallo stile definito in precedenza, e definire
su ciascuna di esse il nuovo stile usando gli attri-
buti di stile previsti da TextView. Come soluzione
funzionerebbe, ma sarebbe un passo indietro. La
cosa migliore da fare, invece, è definire un secondo
stile, da applicare poi in sostituzione del proce-
dente soltanto a quelle etichette che devono essere
modificate. La definizione degli stili, in questo caso,

Page 103

103 Android programming

Android programmingIl framework Funambol per sincronizzare i dati personali

ht tp : / /www. ioprogrammo. i t

metodi del listener in base alla tipologia di operazio-
ne svolta. Questi metodi, implementati nel nostro
NoteListerner, non fanno altro che aggiornare la
TextView con i log, accodando il nuovo messaggio.

CLIENT ANDROID:
GLI ALTRI COMPONENTI
Appoggiandosi alla classe BaseSettings, alcune infor-
mazioni inerenti la SyncSource e il SyncManager
vengono memorizzate ricorrendo al meccanismo
delle Preferences. Si tratta di una pratica alternativa
alla creazione di file o tabelle per conservare infor-
mazioni proprie dell'applicazione, che devono esse-
re mantenute tra un lancio e l'altro. Funziona così: si
memorizzano i dati interessati in una lista di chiavi-

valori (l’oggetto SharedPreferences) per poi chiamare
i metodi del Context che permettono di caricarlo e di
persisterlo per mezzo dell'oggetto SharedPre -
ferences. Editor. Ogni Context può contenere molte-
plici oggetti SharedPreferences, ognuno di essi iden-
tificato da un nome univoco. Nella nostra applica-
zione, abbiamo usato l'identificativo fnblPref. Di
seguito un classico esempio di creazione di un con-
tainer per le preferenze: memorizzazione di un valo-
re di tipo stringa facente capo alla chiave “syncUrl” e
lettura di quest'ultimo.

public static void getAndSetPreference(Activity a) { ... }

L'Activity corrente viene usata per ricavare il riferi-
mento al Context dell'applicazione. È chiaro che
questo metodo è utile per piccoli e semplici insiemi
di dati, mentre per qualcosa di più articolato e com-
plesso occorrerà rivolgersi al altre tecniche di stora-
ge persistente dei dati. Nell'Activity che si occupa
della sincronia, in base al bottone premuto, viene
richiesto un diverso tipo di sincronia: una
SyncML.ALERT _CODE_REFRESH_FROM_SERVER
che forza una cancellazione dei dati del client e
prende in carico solo quelli presenti sul server,
oppure una SyncML.ALERT_CODE_FAST, che tenta
invece di eseguire la classica TWO_WAY_SYNC, ope-
razione in cui client e server si scambiano solo le
modifiche dall'ultima sincronia terminata con suc-
cesso. Seguendo le linee guida per lo sviluppo di
applicativi, questo blocco viene gestito come thread
separato rispetto all'applicazione principale, in
modo da non bloccarla e da poter mostrare un pro-
gessivo dei log di quanto viene eseguito. Per rag-
giungere lo scopo, è stata creata la classe privata
SyncThread, che estende la classe Thread e che
all'interno del metodo Run ha il codice che lancia la
sicronia vera e propria. Nel seguente frammento di
codice possiamo vedere l'inizializzazione della
NotesSyncSourceConfig, alla quale viene passata
l'Activity corrente e il tipo di sincronia richiesta, l'i-
nizializzazione della NotesSyncSource, alla quale
viene passato l'oggetto con le configurazioni della
sincronia appena istanziato e l'Activity corrente, l'i-
nizializzazione del NotesListener, al quale viene pas-
sato l'EditText che conterrà i log e, infine, il collega-
mento del Listener alla SyncSource:

NoteSyncSourceConfig noteconf = new

NoteSyncSourceConfig(FunambolPreferences.this,

syncMode);

NoteSyncSource src = new NoteSyncSource(noteconf,

FunambolPreferences.this);

src.setListener(new NoteListener(Funambol

Preferences.this, mHandler, txtLogArea));

Alfredo Morresi

� MOBILE

Marzo 2010 / 49 G

Il framework Funambol per sincronizzare i dati personali

NOTA

L'INDIRIZZO
DEL SERVER
Se si sta usando la
versione online di
Funambol, l'URI del server
con cui sincronizzare i dati
sarà
http://my.funambol.com/s
ync, mentre se si sta
usando quella in locale,
l'URI sarà
http://indirizzo_ip_locale:
8080/funambol/ds, dove
indirizzo_ip_locale sarà
l'indirizzo del pc,
raggiungibile dal telefono
Android.

Fig. 5: … ed ecco il log della nostra prima sincronia!

Fig. 6: Le note sono state trasferite su Outlook
con successo

044-049:032-035 2-02-2010 17:05 Pagina 49

Page 104

www.punto-informatico.it

Questo approfondimento tematico è pensato per chi vuol imparare a programmare e creare
software per gli smartphone con sistema operativo Google Android. La prima parte del testo
guida il lettore alla conoscenza degli strumenti necessari per sviluppare sulla piattaforma
mobile di Mountain View (installazione SDK, librerie e tool di supporto allo sviluppo).
Le sezioni successive sono pensate per un apprendimento pratico basato su esempi di
progetto: dialogo e interazione con l’ambiente operativo del telefonino, interazione con gli
utenti, componenti di un widget, interfacce in XML, gestione del touch, progettazione dei
menu e via dicendo.
Una serie di esempi pratici da seguire passo passo che spingono il lettore a sperimentare sul
campo il proprio livello di apprendimento e lo invitano a imparare divertendosi.

Similer Documents