Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 10 di 97
  • livello avanzato
Indice lezioni

Gestire le risorse e gli asset

Come gestire le risorse di un'applicazione e come utilizzare queste risorse richiamandole nel codice.
Come gestire le risorse di un'applicazione e come utilizzare queste risorse richiamandole nel codice.
Link copiato negli appunti

Nelle applicazioni Android il codice Java richiama spesso degli elementi interni al progetto come file XML, stringhe, numeri, immagini ed altro ancora. Il modo migliore per conservare tutti questi “valori” a disposizione dell'applicazione è collocarli all'interno della cartella di progetto denominata res e gestirli mediante l'apposito meccanismo delle risorse.

Il capitolo che inizia si occupa proprio di questo: comprendere bene come gestire le risorse di un'applicazione e come utilizzarle richiamandole nel codice. In conclusione, si vedrà un altro meccanismo di gestione di file all'interno del progetto: gli assets.

Dove si trovano le risorse

Se si dà uno sguardo ad un qualsiasi progetto per Android si può vedere che res conta diverse sottocartelle i cui nomi non sono affatto casuali.

Tra quelle di più comune utilizzo, troviamo:

  • layout: conterrà l'architettura grafica dei componenti dell'interfaccia utente. Sono definiti in XML in una maniera simile a come viene usato HTML per strutturare le pagine web;
  • values: conterrà stringhe, colori, dimensioni e altre tipologie di valori che potranno essere usate in ulteriori risorse o nel codice Java. Importante notare che questi valori costituiranno il contenuto di appositi tag XML (<string>, <dimen>, etc.) raggruppati  in files dal nome solitamente indicativo:  strings.xml, dimens.xml, colors.xml e via dicendo. Tali nomi sono frutto di pura convenzione ma il programmatore può scegliere liberamente come chiamarli;
  • drawable: sono immagini nei formati più comuni o, cosa che può stupire, configurate in XML;
  • mipmap: sono immagini che costituiscono l'icona dell'applicazione, quella con cui viene lanciata da sistema operativo. Un tempo erano collocate tra i drawable ma successivamente gli è stata dedicata una sezione a parte tra le risorse.

Come richiamare le risorse

Le risorse vengono compilate in un formato binario ed indicizzate mediante un ID univoco. Tali ID sono conservati in una classe Java, di nome R, autogenerata ad ogni modifica. Abbiamo già incontrato la classe R nell'Activity esaminata in precedenza.

Il codice:

setContentView(R.layout.activity_main);

indicava che il layout dell'activity era collocato tra le risorse. In particolare, ogni percorso interno alla classe R rispecchia una collocazione di risorse nelle sottocartelle di res come viene illustrato in figura.

Mediante i loro identificativi, le risorse sono accessibili sia da codice Java che da altre risorse definite in XML:

  • in Java: tramite R.tipo_risorsa.nome_risorsa;
  • in XML: @tipo_risorsa/nome_risorsa.

Ad esempio, la risorsa di tipo stringa e nome appname:

<string android:name="appname">Hello world!</string>

potrà essere recuperata, in Java, mediante R.string.appname o dall'interno di altre risorse XML con @string/appname.

Adattamento multipiattaforma delle applicazioni

La frammentazione dello scenario hardware nel mondo Android resta uno degli scogli più ardui da superare per il programmatore. In questo le risorse giocano un ruolo molto importante.

Una loro organizzazione tipica in un progetto in Android Studio appare qui in figura:

Organizzazione delle risorse in un progetto Android (click per ingrandire)Organizzazione delle risorse in un progetto Android

Si vede un esempio di app, visualizzata nella configurazione denominata "Android". Osserviamo che alcune cartelle mostrano risorse con lo stesso nome. Ad esempio, in layout c'è activity_main con la notazione (2) che indica due file di quella tipologia ed uno di essi riporta la denominazione (land) intendendo che il layout sarà da attivare solo quando il dispositivo sarà in posizione con il lato lungo in orizzontale.

Quest'altra inquadratura proveniente sempre da Android Studio:

Visualizzazione delle risorse in configurazione Project (click per ingrandire)Visualizzazione delle risorse in configurazione Project

mostra lo stesso progetto visualizzato in modalità "Project" dove appare la suddivisione fisica delle cartelle. Qui è ancor più evidente che al nome della cartella si può accodare un suffisso che rappresenta la configurazione del dispositivo con cui potranno essere richiamate le risorse contenute.

Se, ad esempio, res/layout conterrà la struttura grafica delle varie interfacce per una qualsiasi configurazione, res/layout-land conterrà layout utilizzabili solo quando il dispositivo è in posizione landscape. Altri modificatori di una certa rilevanza sono quelli che si riferiscono alla lingua del dispositivo: values-it saranno le risorse per dispositivi in italiano, values-en per quelli in inglese. Di modificatori esiste una collezione grandissima, tutta disponibile sulla documentazione ufficiale.

Un discorso a parte meritano le immagini. I modificatori applicati alle cartelle drawable e mipmap (ldpi, mdpi, hdpi e via dicendo) sono alcune delle sigle che identificano le densità dei display. Questo concetto di densità rappresenta la quantità di pixel per area fisica dello schermo. Programmando per Android è bene abbandonare l'abitudine di misurare in pixel, utilizzando come unità di misura degli elementi grafici i dp (Density-Indipendent Pixel), una specie di pixel “virtuale” indipendente dalla densità del display che permette di mantenere intatte le proporzioni tra gli elementi del layout al variare delle densità.

Gli assets

La documentazione ufficiale elenca tutte le tipologie di risorse che possono essere usate. Esiste anche un tipo di risorsa “grezza” collocabile nella cartella res/raw. Vi si potrà collocare tutto ciò che non si riesce ad inquadrare in una particolare tipologia. In alternativa alle risorse raw, si possono definire gli assets. Questi esulano dal meccanismo delle risorse e vanno depositati nell’omonima cartella di progetto che, se non presente, può essere creata come mostrato nella figura che segue.

Creazione della cartella assets (click per ingrandire)Creazione della cartella assets

Non vengono né compilati in formato binario né etichettati con un ID univoco. La loro fruizione da parte dell'applicazione avverrà mediante uno stream che potrà essere richiesto ad una classe Java di nome AssetManager.

Ti consigliamo anche