sabato 19 febbraio 2011

Android, introduzione alle risorse

La cartella res/ di un progetto Android contiene le risorse utilizzate dall'applicazione. Alcune di queste, create di default dal SDK di Android, hanno lo stesso nome dei tipi di risorse riconosciute dal sistema operativo. All'occorrenza possiamo creare nuove cartelle e file per le nostre risorse. Le risorse nella cartella res/ vengono ottimizzate per l'utilizzo sul dispositivo, a differenza di quelle allocate nella cartella assets/ che sono utilizzate così come sono (attraverso oggetti della classe AssetManager).
Per dare al programmatore la possibilità di referenziare una risorsa all'interno del codice viene generato, nella classe R.java, un id. Non modificate la suddetta classe, la generazione degli id è un processo automatico! Vi invito a dare uno sguardo al contenuto del file R.java. Troverete, divisi per tipologia di risorsa, i nomi delle risorse e le costanti ad esse associate. Ad esempio, dopo aver generato con il tool di sviluppo le cartelle e i file del progetto, noterete la presenza della costante R.drawable.icon che fa riferimento all'icona usata per l'applicazione (all'interno del manifesto). L'icona da usare per l'applicazione viene scelta dal dispositivo, in base alle caratteristiche del proprio display! Esistono infatti più versioni della stessa icona detta sopra, raccolte nelle cartelle res/drawable-hdpi/, res/drawable-ldpi/ e res/drawable-mdpi/. Android offre svariati tipi di risorse che possiamo suddividere in:
  • risorse di tipo elementare;
  • risorse di tipo drawable:
  • risorse di tipo layout;
Le risorse di tipo elementare, raccolte dai tag resources (inizio e fine tag) in un file xml, definiscono stringhe e valori usati nell'applicazione, queste possono essere:
  • stringhe, tag string, l'attributo name="resource_name" (univoco) è l'id della risorsa mentre il contenuto racchiuso fra il tag di apertura e chiusura è la risorsa stringa;
  • array di stringhe, tag string-array, l'attributo name="resource_name" (univoco) è l'id della risorsa, ogni stringa dell'array è racchiusa dai tag item (il valore è fra i tag di inizio e fine);
  • array di interi, tag integer-array, l'attributo name="resource_name" (univoco) è l'id della risorsa, ogni intero dell'array è racchiuso dai tag item (il valore è fra i tag di inizio e fine);
  • rettangoli colorati, tag drawable, l'attributo name="resource_name" (univoco) è l'id della risorsa. Il valore fra i tag di apertura e chiusura definisce il colore della risorsa, espresso attraverso uno dei seguenti formati: #RGB, #RRGGBB, #AARRGGBB (quest'ultima notazione consente di specificare un valore per il canale alfa, la trasparenza);
  • colori, tag color, l'attributo name="resource_name" (univoco) è l'id della risorsa. Il valore fra i tag di apertura e chiusura definisce il colore della risorsa, espresso attraverso uno dei seguenti formati: #RGB, #RRGGBB, #AARRGGBB (quest'ultima notazione consente di specificare un valore per il canale alfa, la trasparenza);
  • dimensioni, tag dimension, l'attributo name="resource_name" (univoco) è l'id della risorsa. Il valore fra i tag di apertura e chiusura definisce la dimensione, espressa usando una delle seguenti unità di misura: px, per i pixel; in, per i pollici; mm, per i millimetri; pt, per i punti; dp, per le misure indipendenti dalla densità del display; sp, per le misure relative;
Le risorse elementari vengono dichiarate all'interno di file xml (oppure sono file binari) e possono essere referenziate sia all'interno del codice (metodo getResource()) e sia all'interno di altri file xml (seguendo la sintassi @resource_type/resource_name).
Le risorse di tipo drawable sono tutte quelle risorse che necessitano di essere disegnate sullo schermo del dispositivo. All'interno del codice possiamo ottenere un riferimento a risorse di tipo drawable (descritte dalla classe Drawable del package android.graphics.drawable) attraverso il metodo getDrawable(int id), a cui bisogna passare l'id della risorsa. La stessa risorsa può essere invece usata in altri file xml, seguendo la sintassi già vista in precedenza (@resource_type/resource_name). Android specializza ulteriormente questo tipo di risorse derivandone altre, alcune di esse sono:
  • BitmapDrawable, descrive una risorsa di tipo immagine (png, jpg e gif);
  • ColorDrawable, descrive una risorsa all'interno di un rettangolo colorato;
  • InsetDrawable, descrive una risorsa di tipo drawable con bordi e/o margini;
  • GradientDrawable, descrive una risorsa come gradiente di colore ;
  • ClipDrawable, descrive una risorsa come porzione di un'altra risorsa di tipo drawable;
  • NinePatchDrawable, definisce una risorsa con le informazioni necessarie a scalare l'immagine lungo uno dei suoi lati;
  • LayerDrawable, definisce una risorsa come un'immagine composta da più livelli (altre risorse di tipo Drawable);
  • TransitionDrawable, descrive una risorsa il cui stato varia fra due risorse di tipo drawable;
  • ScaleDrawable, descrive una risorse scalata;
  • RotateDrawable, descrive una risorsa ruotate;
  • ShapeDrawable, descrive una risorsa di natura geometrica;
Le risorse di tipo drawable possono essere dichiarate sia all'interno di file xml che all'interno del codice (attraverso le omonime classi Java).
Le risorse di tipo layout sono descritte da file xml, nella cartella res/layout/, e si occupano della descrizione dell'interfaccia grafica da applicare all'attività dell'applicazione. E' all'interno di questo file che disponiamo, con opportuni tag, i componenti che permetteranno all'utente di interagire con l'applicazione. E' particolarmente importante istruire il tool di sviluppo affinché ciascun componente aggiunto sia dotato di un proprio id. Questo faciliterà la ricerca dello stesso durante la scrittura del codice o del file xml che descrive altre risorse.
Tale proprietà va definita mediante l'attributo android:id="@resource_type/resource_name", dove resource_type specifica il tipo di risorsa e resource_name identifica la costante ad essa associata. Attenzione, la sintassi appena vista va usata solo se per il componente è stato già definito un id. Se quest'ultimo non esiste ancora va allora usata la seguente sintassi android:id"@+resource_type/resource_name".

Nessun commento:

Posta un commento