Gestire le risorse e gli asset

28 maggio 2014

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.

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 e visibile nella cartella gen del progetto Android. 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.

09_img01

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. Osservando un tipico progetto Android si può vedere che tra le cartelle interne a res (figura sotto) ne appaiono alcune con nomi “canonici” (menu, values, layout) e altre con nomi “modificati” (drawable-hdpi, drawable-mdpi ma anche values-v14, values-v11, etc.).

09_img02

Questo perchè 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 (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. 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.

Tutte le lezioni

1 ... 9 10 11 ... 84

Se vuoi aggiornamenti su Gestire le risorse e gli asset inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Gestire le risorse e gli asset

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy