8/10/2019 Primi Passi in Android
1/57
Primi passiin Android
A cura di Matteo Mungo
8/10/2019 Primi Passi in Android
2/57
Com fatto Android?
Matteo Mungo
8/10/2019 Primi Passi in Android
3/57
Struttura del progetto
I mattoni fondamentali di unapplicazione:
Activity Service
Broadcast Receiver
Content Provider
Com fatta unapplicazione?
Matteo Mungo
8/10/2019 Primi Passi in Android
4/57
!na singola e precisa cosa c"e lutente pu#
fare$
%e attivit& sono 'uei componenti diunapplicazione Android c"e fanno uso deldispla( e c"e interagiscono con lutente
android.app.Activity
Cos unActivit(?
Matteo Mungo
8/10/2019 Primi Passi in Android
5/57
)ascita e morte di unActivit(
Matteo Mungo
8/10/2019 Primi Passi in Android
6/57
protected voidonCreate*android+os+Bundle
savedInstanceState,
protected voidonStart*,
protected voidonResume*,
protected voidonPause*,
)ascita e morte di unActivit(
Matteo Mungo
8/10/2019 Primi Passi in Android
7/57
%a prassi ric"iede c"e- come prima riga di codice di
ciascuno di 'uesti metodi- si ric"iamilimplementazione di .ase del metodo c"e si staridefinendo
C da sapere c"e/
Matteo Mungo
8/10/2019 Primi Passi in Android
8/57
0gni Activit( creata ed utilizzata nella propria
applicazione deve essere esplicitamentedic"iarata nel fileAndroidManifest.xml
C da sapere c"e/
Matteo Mungo
8/10/2019 Primi Passi in Android
9/57
0gni applicazione deve avere il suo file
AndroidManifest.xml
LAndroidManifest.xml il file c"e definisce i
contenuti e il comportamento della nostraapplicazione: allinterno di 'uesto file sonoelencate leActivitye iService
dellapplicazione- con i permessi c"e necessitaper funzionare correttamente+
1ualc"e parola su
AndroidManifest.xml
Matteo Mungo
8/10/2019 Primi Passi in Android
10/57
I permessi sono necessari ad unapplicazione
per poter usare le periferic"e del dispositivo*2PS- 3i4i- /, e per poter eseguire operazionidelicate come ottenere informazioni suicontatti dellutente- inviare SMS e cos5 via+
Per facilitare lutente- alcune informazioni
vengono gestite e generate dalsistema/alcune- non tutte- 'uindi attenzione6
1ualc"e parola su
AndroidManifest.xml
Matteo Mungo
8/10/2019 Primi Passi in Android
11/57
Ritornando alle Activit(/
0gni tag allinterno del manifestopu# avere associato un tag
2li intentsono dei messaggi c"e il sistemamanda ad unapplicazione 'uando si aspettac"e 'uesta faccia 'ualcosa
Attraverso un intent-filter- possono essereattivate in risposta ad uno specifico evento
1ualc"e parola su
AndroidManifest.xml
Matteo Mungo
8/10/2019 Primi Passi in Android
12/57
Allinterno del tag troviamo
Individua gli intent c"e ric"iedono lazione specificata+
Individua gli intent c"e appartengono alla categoria specificata+
1ualc"e parola su
AndroidManifest.xml
Matteo Mungo
8/10/2019 Primi Passi in Android
13/57
!napplicazione Android pu# contenere pi7 di
unattivit&+ In 'uesto caso una soltanto sar&marcata come attivit& principale di lancio+
0gni Activit( viene creata allo stesso modo
allinterno del progetto+
Per passare da unactivit( allaltra si usa il metodo
startActivity( c"e accetta come argomento unoggetto di tipo !ntent+
8a unActivit( allaltra/
Matteo Mungo
8/10/2019 Primi Passi in Android
14/57
9utti i dispositivi mo.ile di nuova
generazione puntano tantissimosullinterazione con lutente+
%interfaccia una componente crucialenella creazione di unapplicazione+
Android fornisce numerosi strumenti perraggiungere 'uesto o.iettivo
0- ma/tutto logica e niente
interfaccia?
Matteo Mungo
8/10/2019 Primi Passi in Android
15/57
"ie#e "ie#$rou%
I .ottoni- i campi di testo- le icone e tutti glialtri congegni di uninterfaccia grafica sonooggetti "ie#
I "ie#$rou% sono dei contenitori c"e possonomettere insieme pi7 oggetti "ie#+ ;ssendo a
loro volta oggetti "ie#possono esserecontenuti in altri "ie#$rou%
Alla .ase dellinterfaccia/
Matteo Mungo
8/10/2019 Primi Passi in Android
16/57
< possi.ile organizzare i componenti sullo
sc"ermo secondo uno sc"ema logico adal.ero
"ie#e "ie#$rou%
Matteo Mungo
8/10/2019 Primi Passi in Android
17/57
View
android.view.View
)ella li.reria standard di Android ci sono gi&molti componenti di 'uesto tipo- soprattuttonel pacc"etto android.#id&et
ViewGroup
android.view.ViewGroup
"ie#$rou% una classe astratta pertanto non
pu# essere istanziata direttamente
"ie#e "ie#$rou%
Matteo Mungo
8/10/2019 Primi Passi in Android
18/57
Widget: tutti 'uei componenti di .ase per
linterazione con lutente *.ottoni- c"e.o=-campi di testo- liste- /,
Sono tutte le "ie#c"e le li.rerie di Android cimette a disposizione gi& implementate nelpacage android.#id&et
>ediamo i principali 3idget c"e possiamousare per le nostre applicazioni
'ottoni c)ec*+ox cam%i di testo,
Matteo Mungo
8/10/2019 Primi Passi in Android
19/57
8/10/2019 Primi Passi in Android
20/57
;stende ext"ie#e permette
allutente di modificare il testomostrato+
Il testo digitato pu# essererecuperato con il metodo&etext( c"e restituisce un
oggetto del tipoandroid.text.dita+le
;dit9e=t
Matteo Mungo
8/10/2019 Primi Passi in Android
21/57
Permette di creare un .ottone c"e lutente
pu# cliccare o premere+ ;siste anc"e nella variante ImageButton in cui
viene si pu# indicare unimmagine al posto diun testo
Button
Matteo Mungo
8/10/2019 Primi Passi in Android
22/57
!n componente utile per mostrare
unimmagine- ad esempio unicona Metodi utili: set!ma&e'itma%(
set!ma&e/ra#a+le(
Image>ie
Matteo Mungo
8/10/2019 Primi Passi in Android
23/57
;stendono entram.e da ext"ie#e 'utton
!tili- rispettivamente- per selezionare pi7possi.ilit& contemporaneamente o perindicarne una sola esclusivamente
C"ecBo= e RadioBo=
Matteo Mungo
8/10/2019 Primi Passi in Android
24/57
8ue componenti utili per impostare la data *giorno
mese anno, e lora- magari per unapplicazione c"egestisce appuntamenti+
8ataPicer &et/ay0fMont)(- &etMont)( e
&et1ear(+ 9imePicer&etCurrent2our( e &etCurrentMinute(
8ataPicer e 9imePicer
Matteo Mungo
8/10/2019 Primi Passi in Android
25/57
9utti gli oggetti discussi finora ric"iedono- nei
loro costruttori- un oggetto c"e estenda laclasse astratta android.content.Context
Si tratta di una struttura c"e permette
laccesso al sistema e c"e costituisce ilcontesto di esecuzione dellapplicazione
%Activit( estende indirettamente 'uesta classe
per cui sar& sufficiente usare linvocazione t)isin fase di costruzione di un 'ualsiasi 3idget
Per tutti i 3idget
Matteo Mungo
8/10/2019 Primi Passi in Android
26/57
Con 'uesto termine si identificano tutti 'uei
"ie#$rou% c"e servono per organizzare ilposizionamento dei idget allinterno di unasingola sc"ermata di Activit(
Android fornisce varie implementazioni di%a(out per ogni tipo di esigenza+
I principali sono: FrameLayout-RelativeLayout-LinearLayouteTableLayout
I %a(out
Matteo Mungo
M M
8/10/2019 Primi Passi in Android
27/57
Accetta un idget- lo allinea in alto a sinistra e
lo estende per tutta la dimensione disponi.ileal la(out stesso
4rame%a(out
Matteo Mungo
M tt M
8/10/2019 Primi Passi in Android
28/57
8isegna un componente aggiunto al suo
interno nelle sue dimensioni ideali- senzaallargarlo per ricoprire lintera area adisposizione
Per default- il componente aggiunto vieneallineato in alto a sinistra- ma possi.ile
controllare lallineamento servendosi delmetodo set$ravity(
Relative%a(out
Matteo Mungo
Matteo Mungo
8/10/2019 Primi Passi in Android
29/57
Il metodo usa costanti della classe
android.vie#.$ravity'uali $ravity.0P-$ravity.L3e simili+ Si possono com.inare traloro 'uesti valori- purc" non siano in
contrasto tra loro- con loperatore @ *pipe, c"ele mette in 0R tra loro
Relative%a(out
Matteo Mungo
Matteo Mungo
8/10/2019 Primi Passi in Android
30/57
!n la(out utile per disporre pi7 componenti
uno di seguito allaltro- sia orizzontalmentec"e verticalmente
Il suo orientamento pu# essere sta.ilitoc"iamando il metodo set0rientation(- conargomento pari a LinearLayout.20R!405AL o
LinearLayout."R!CAL
%inear%a(out
Matteo Mungo
8/10/2019 Primi Passi in Android
31/57
Matteo Mungo
8/10/2019 Primi Passi in Android
32/57
Permette di sistemare i componenti secondo
uno sc"ema a ta.ella- suddiviso cio in rig"e ecolonne
1uesto la(out va costruito includendo al suo
interno oggetti a+leRo#- ciascuno dei 'ualicostituisce una riga
Il metodo set$ravity(- pu# essere usato anc"e
'ui- sia su a+leLayoutc"e su a+leRo#- persta.ilire gli allineamenti relativi
9a.le%a(out
Matteo Mungo
8/10/2019 Primi Passi in Android
33/57
Matteo Mungo
8/10/2019 Primi Passi in Android
34/57
3idget e attri.uti 2li attri.uti applica.ili ad un tag variano a
seconda del componente cui fannoriferimento+
Sono in numero elevato ed consiglia.ile fareriferimento alla documentazione ufficiale
8ue componenti o..ligatori: layout!idt e
layouteigtc"e ric"iedono i valori!ra#contento matc#arent
Matteo Mungo
Matteo Mungo
8/10/2019 Primi Passi in Android
35/57
3idget e attri.uti
!ra#contentsu
layout!idt e
layouteigt
!ra#contentsu
layout!idt e
matc#arentsu
layouteigt
matc#arentsu
layout!idt e
!ra#contentsu
layouteigt
matc#arentsu
layout!idt e su
layouteigt
g
8/10/2019 Primi Passi in Android
36/57
Matteo Mungo
8/10/2019 Primi Passi in Android
37/57
Interfacce complesse tanto codice
Alto accoppiamento tra codice e dati Per porre un rimedio a 'uesti pro.lemi- c"e
non riguardano solo la programmazioneAndroid- ma in generale 'ualun'ue am.ientedi sviluppo e linguaggio- i suoi creatori "anno
sin da su.ito sfruttato un strumento .en notoal mondo 3e.: DM%
3idget %a(out ?
Matteo Mungo
8/10/2019 Primi Passi in Android
38/57
4acciamo un passo
indietro: la cartella diprogetto res
0gni cartella gestisce unaspetto essenziale per lacreazione dellinterfaccia
utente e non solo+
Android- DM% e/
Matteo Mungo
8/10/2019 Primi Passi in Android
39/57
I fogli DM% rendonola creazione egestione dei la(outmolto pi7 semplice efluida
DM% %a(out
Matteo Mungo
8/10/2019 Primi Passi in Android
40/57
!n aiuto non guasta mai/
8/10/2019 Primi Passi in Android
41/57
Matteo Mungo
8/10/2019 Primi Passi in Android
42/57
>iene generata automaticamente in fase di
compilazione del progetto %utente )0) 8;>; aggiungere- modificare o
eliminare alcuna informazione da 'uesta classe
per poterne utilizzarne le funzionalit& sufficiente sapere c"e il contenuto costituito
da una serie di varia.ili c"e mappano il contenutodella cartella res assegnando un codice di tipo intper ogni oggetto
%a classe R
8/10/2019 Primi Passi in Android
43/57
Matteo Mungo
8/10/2019 Primi Passi in Android
44/57
Per risorse 'uali immagini- file audio- string"e
e 'uantaltro- da codice- necessario ottenerepreventivamente listanza delloggettoResources attraverso il metodo &etResources(
!na volta ottenuta listanza si usano i metodidel tipo &et5omeRisorsa messi a disposizione*es+ &etColor(int id &et/imension(int id
indicando il corrispettivo identificativogenerato dalla classe R
In pratica come si usa R?
Matteo Mungo
8/10/2019 Primi Passi in Android
45/57
possi.ile ric"iamare un contenuto DM%
anc"e allinterno di un altro DM%+ 1uestorende pi7 facile agire sui singoli componentisenza doverne forzatamente modificarne altri
In pratica come si usa R?
Matteo Mungo
8/10/2019 Primi Passi in Android
46/57
$array- per gli arra(+
$color- per i colori+ $dimen- per le dimensioni+
$dra!able- per i valori dra#a+le- ma anc"e per
le immagini messe in res7dra#a+le+ $layout- per ric"iamare altri la(out+
$ra!- per i file nella cartella res7ra#+
$%tring- per le string"e+ $%tyle- per gli stili+
%e principali categorie disponi.ili
Matteo Mungo
8/10/2019 Primi Passi in Android
47/57
Ad ogni componente o idget possi.ile
assegnare un I8 univoco utile e necessario infase di programmazione per rintracciarli
%operazione di assegnamento molto
semplice: .asta aggiungere lattri.utoandroid8idseguito da una stringa con una
specifica sintassi:9:nome$ru%%o7nome!d
Assegnare un I8
Matteo Mungo
8/10/2019 Primi Passi in Android
48/57
1uesta sintassi fa s5 c"e nella classe R venga
introdotto- se non esiste gi&- il grupponome$ru%%o- e c"e al suo interno vengamemorizzato il riferimento allI8 nome!d
A 'uesto punto si potr& ottenere unriferimento a 'uel componente- nel codice
Fava- usando semplicementeR+nome2ruppo+nome!d
Assegnare un I8
Matteo Mungo
8/10/2019 Primi Passi in Android
49/57
%I8 in pratica/
Matteo Mungo
8/10/2019 Primi Passi in Android
50/57
8o..iamo imparare ad intercettare gli input
dellutente *provenienti da .ottoni- pressioni-caselle di testo e altri eventi, e reagire a talieventi+
9utti i idget di Android dispongono di unaserie di metodi di call.ac- con nomi del tipo
oni%ovento(
/e per finire?
Matteo Mungo
8/10/2019 Primi Passi in Android
51/57
Sono molti i metodi di 'uesta categoria- ed
ogni idget "a i propri+ Ciascun metodo "a lesue regole e la sua firma
;sempio: il metodo onouc)vent(- c"e riceve
in ingresso un argomento di tipoandroid.vie#.Motionvent- c"e riporta tutte le
informazioni relative allevento di toccoriscontrato sul .ottone
I metodi Call.ac
Matteo Mungo
8/10/2019 Primi Passi in Android
52/57
!n esempio di CallBac
Matteo Mungo
8/10/2019 Primi Passi in Android
53/57
%a ridefinizione dei metodi di call.ac una
tecnica c"e funziona- ma non molto pratica:ogni volta c"e si usa un idget .isognaestenderlo e generare 'uindi unaltra classe- in
modo da poter ridefinire il metodo *o imetodi, di call.ac di proprio interesse
9utti i idget mettono a disposizione una
seconda serie di metodi- 'uesta volta del tiposet0ni%oventoListener(
;vent %istener
Matteo Mungo
8/10/2019 Primi Passi in Android
54/57
Basta definire il %istener e darlo in pasto alidget c"e vogliamo- senza ridefinirlointeramente
;vent %istener
Matteo Mungo
8/10/2019 Primi Passi in Android
55/57
;sistono diversi trucc"i applica.ili con gli
event listener c"e evitano di creare una classeapposita per ogni %istener+
)el caso- ad esempio- di 2!I non troppo
complesse- si pu# fare c"e laActivity c"econtrolla lo sc"ermo sia essa stessa eventlistener di uno o pi7 eventi- per uno o pi7idget
;vent %istener
; %i
Matteo Mungo
8/10/2019 Primi Passi in Android
56/57
!naltra tecnica c"e permette di risparmiare
codice e lavoro consiste nelladoperare leclassi innestate anonime di Fava+
;vent %istener
P fi i
Matteo Mungo
8/10/2019 Primi Passi in Android
57/57
2li eventi c"e Android permette di
gestire:&lic' set0nClic*Listener(
&lic' lungo set0nLon&Clic*Listener(
Tocco set0nocu)Listener(
(igitazione se0n;eyListener(
Per finire/
Top Related