Lavorare con le Risorse in Android

Capiremo cosa sono le risorse e come lavorare correttamente con le diverse tipologie disponibili in Android.

tempo tutorialTi servono: 20 minuti

Molti degli elementi di testo, immagini, che si visualizzano all'interno di una app Android, spesso sono memorizzati all'interno dell'applicazione stessa. Basti pensare alla sezione menu, oppure ai titolo di ciascun menu, ai colori di un testo, di uno sfondo, ai messaggi di errore, etc etc.

Nel mondo web, queste informazioni sono memorizzate, da una parte, all'interno del codice htm della pagina, e dall'altro (vedi colore, immagini, dimensioni etc) all'interno di un foglio di stile (file css).

Alla fine del tutorial "Chiamare una activity", abbiamo visto come richiamare un layout precedentemente definito all'interno di una fantomatica cartella Risorse (res), padre della cartella Layout.

Ebbene come rappresentato nella figura qui sotto, tali cartelle, sono la base di partenza per definire tutti gli aspetti visuali della nostra applicazione. Una sorta di distributore di benzina che fornisce, testo, immagini, colori, layout alla nostra app.

cartella res

E' buona norma del bravo programmatore android, ordinare e separare le informazioni in modo che sia semplice individuarle anche a chi non ha partecipato allo sviluppo dell'applicazione.

Avrai già visto che quando creiamo un progetto in Android Developer Tools, in automatico vengono create diverse sottocartelle interne alla cartella di sistema "res". Lo scopo è fornire al programmatore un'indicazione su come suddividere le diverse risorse, al fine di rendere tutto semplice e lineare.

NB: Tutto questo non è obbligatorio, nel senso che potresti memorizzare tutte le informazioni nello stesso file, per le stringhe, per i colori etc, senza distinguere il tutto per cartelle. Il mio consiglio però è di separare il più possibile al fine di rendere la manutenzione più semplice anche a distanza di mesi.

Vediamo allora alcune tipiche sottocartelle che è possibile trovare nella maggior parte delle applicazioni, per poi analizzare cosa è possibile memorizzare all'interno di ciascuna di esse.

a) Cosa inserire dentro alla cartella "Values"

Il nome di questa cartella è abbastanza generico ma eloquente: qui dentro andremo a memorizzare tutte le informazioni legate ai messaggi o al testo, quindi in generale stringhe, che vogliamo mostrare all'interno di una qualche Activity (pagina).

Le stringhe sono tutte quelle sequenze di caratteri che servono per dare un titolo ad un menu, fornire informazioni a fianco di un campo per l'inserimento di dati, ad un messaggio di errore, un colore, una misura e cosi' via, sia nella nostra lingua che in altre lingue.

Al fine di rendere le nostre applicazioni semplici da gestire, invece che memorizzare queste stringhe direttamente nel controllo trascinato all'interno di un particolare Layout, fig.1, si va a memorizzarli all'interno di un grosso calderone (file XML) che generalmente viene chiamato con la parola strings: es. strings.xml, a cui chiunque elemento delle mia applicazione può accedere.

NB: Questo nome puoi modificarlo, ma è quello che viene creato come predefinito.

Quindi un'unica posizione per una risorsa usata da più elementi, e nella prossima lezione vedremo le tecniche per recuperare tali informazioni o dal codice o da altre risorse. 

Analogamente alle stringhe, è posssibile memorizzare le informazioni sui colori che la nostra applicazione avrà bisogno di utilizzare. Colori che possono essere specificati per lo sfondo, il testo e così via. I colori possono essere rappresentati nella classica forma esadecimale o con la presenza del canale alfa (trasparenza)

Oppure posso memorizzare informazioni relative alla dimensione, pensa al testo, alla larghezza di alcuni elementi di un form, o di un layout etc.

Quindi così come avviene per le pagine web, in cui le informazioni sul colore di un certo testo vengono memorizzate all'interno di un foglio di stile, anche in Android è possibile memorizzare tali informazione all'interno di una file xml, che usando il nostro SDK predefinito, facilmente può essere creato con una struttura del tipo:

<?xml version="1.0" encoding="utf-8"?>
<resource>
<!-- qui inseriremo stringhe, color, dimensioni etc-->
</resource>

Localizzazione Risorse

ATTENZIONE: Una caratteristica importante della cartella Value è che è possibile sfruttare l'infrastruttura di Android, per gestire le diverse lingue (Localizzazione) con cui una nostra applicazione può essere sviluppata.

Pertanto, se l'italiano è la lingua predefinita dell'applicazione, creando la cartella "Value-<Codice ISO 639-2 lingua>", dove <lingua> può essere "en" per identificare l'inglese, "de" per il tedesco etc etc., potremmo memorizzare qui dentro tutte le stringhe in inglese, tedesco etc e lasciare ad Android, la scelta di quali prelevare, sulla base della lingua predefinita nel dispositivo dell'utente che sta facendo l'installazione.

Per la lista completa dei codici ISO consulta questa pagina: http://www.loc.gov/standards/iso639-2/php/code_list.php

Questo è molto vantaggioso perchè in questo modo non devo impazzire nel definire centinaia di nomi di stringa per identificare quelle in italiano, quelle in inglese (-en), quelle in tedesco (-ge), etc.

Per maggiori informazioni sulla sintassi da usare nella memorizzazione delle stringhe consulta questo link: 
http://developer.android.com/guide/topics/resources/string-resource.html

Qual è il vantaggio di usare le risorse separate dall'app?

Semplice: immagina di voler cambiare la voce di un menu, definito all'interno di 20 layout, dopo 1 anno che hai terminato il tutto. Se non avessi questo sistema, dovresti cambiare manualmente 20 voci, a patto di ricordarti esattamente in tutti i punti in cui è stata definita.

Se invece questa voce la memorizza in un'unica posizione, quindi dentro ad un file xml, memorizzato in una cartella Value, con una sola modifica, puoi aggiornare tutti i layout che fanno riferimento a quella risorsa, con un notevole risparmio di tempo.

b) Cosa inserire dentro alla cartella Drawable

Questa cartella conterrà all'interno le diverse immagini che la nostra applicazione userà. Il sistema con cui Android gestisce le risoluzioni dei diversi dispositivi è tale che la cartella Drawable è stata suddivisa in diverse altre cartella, evidenziata dalla sigla (hdpi,ldpi,mdpi,xhdpi) in cui andrò a memorizzare le stesse immagini, cambiandone la risoluzione. In questo modo, a seconda di quale dispositivo installerà l'applicazione, in automatico saranno prelevate le immagini coerenti con la risoluzione ammessa. 

c) Cosa inserire dentro alla cartella Mipmap

A partire dalla versione antecedenti alla 4.3 di Android, l'icona per lanciare l'applicazione, veniva memorizzata all'interno delle diverse cartelle drawable, a seconda delle dimensioni di questa, in modo da adattarla alle risoluzioni del dispositivo in cui l'applicazione veniva installata. A partire dalla versione 4.3 di Android, il team di Google ha deciso di usare come "best practise" quella di trasferire tutte le icone di lancio dell'applicazione, create alle diverse dimensioni, dentro alle cartelle mipmap (hd,md,xh,xxh)

Struttura cartelle mipmaps android

d) Cosa inserire dentro alla cartella Layout

In questa cartella memorizzeremo, sotto forma di file xml, tutti i layout delle diverse Activity che andremo via via a progettare per la nostra applicazione. Il layout non è altro che un insieme di indicazioni sulla disposizione di elementi quali immagini, testo e sul loro significato in relazione ai dati che dovranno rappresentare.

e) Cosa inserire dentro alla cartella Menu

Nella cartella Menu, generalmente si inseriscono i layout di tutti quei menu contestuali che è possibile attivare da un'applicazione Android, con i pulsanti hardware (vecchi dispositivi) o integrati, il tutto sempre tramite un file xml. 

E' possibile usare anche altre cartelle, ma queste in linea di massima sono quelle che generalmente troverai nella maggior parte delle applicazioni Android e che ti invito fino da ora a memorizzare per capire come suddividere le risorse di cui sara' composta la tua applicazione.  

Ti è servito un pò, l'articolo? Condividilo ADESSO sui social! Grazie :-)

Tipo/Autore: Pubblicato da: CorsoAndroid.it

Voto 4.3/5 basato su 31 Recensioni
© 2011-2017 CorsoAndroid.it - Tutti i diritti riservati. Corso Base Android per rompere il ghiaccio Creare app per android
NB: Tutti i marchi citati sono di proprietà dei rispettivi proprietari. Android is a trademark of Google Inc.