primi passi in android

Upload: matteo-mungo

Post on 02-Jun-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 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/