lunedì 21 febbraio 2011

Android, ColorDrawable


La risorsa ColorDrawable, tag drawable nel file xml, descrive un rettangolo colorato che può essere usato come background per l'applicazione. L'attributo name, nel tag di apertura, permette di referenziare la risorsa in altri file xml, il valore che specifica il colore è invece racchiuso fra i tag di apertura e chiusura dell'elemento. Possiamo ottenere lo stesso effetto definendo anche una risorsa (elementare) di tipo color. Va comunque detto che con la risorsa ColorDrawable sarà possibile ottenere un riferimento all'oggetto Drawable con il metodo getDrawable().
Trovate un esempio per l'utilizzo di questa risorsa qui. Nella cartella res/drawable/ (da me creata) ho descritto nel file background.xml la risorsa di tipo ColorDrawable. La stessa risorsa è stata quindi applicata al file main.xml, nella cartella res/layout/, che descrive il layout dell'activity. Potete installare questa applicazione sul vostro dispositivo Android anche attareverso il seguente codice QR:

qrcode

sabato 19 febbraio 2011

Android, BitmapDrawable


La risorsa BitmapDrawable può essere definita all'interno di un file xml, attraverso il tag bitmap che prevede i seguenti attributi:
  • xmlns:android: definisce il nome dello schema xml, deve necessariamente valere http://schemas.android.com/apk/res/android e va usato solo se la risorsa dichiarata nel file xml è l'elemento radice (il primo) all'interno del file;
  • android:src="@drawable/resource_name": esprime il riferimento alla risorsa da disegnare;
  • android:antialias="value": abilita o disabilita l'effetto antialias, value può dunque valere true oppure false;
  • android:dither="value": abilita o disabilita il dithering, value può dunque valere true oppure false;
  • android:filter="value": abilita o disabilita il filtro per migliorare l'aspetto delle immagini quando essa appare ridotta o allungata, value può dunque valere true oppure false;
  • android:gravity="value": definisce l'allineamento nei confronti della risorsa che fa da contenitore, value può valere: top, bottom, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill, clip_vertical, clip_horizontal;
  • android:tileMode="value": stabilisce come deve essere visualizzata la risorsa al'interno del contenitore, se va disegnata una sola volta (disabled) oppure affiancata più volte (repeat);
Il codice sorgente dell'esempio è disponibile qui. Nella cartella res/drawable/ ho disposto il file pattern.png che ho quindi usato per la descrizione della risorsa background.xml, dove uso l'immagine ripetendola più volte. Nella cartella res/layout/, invece, ho aggiunto al file main.xml la risorsa definita in precedenza (lo sfondo dell'applicazione). Il nome della risorsa background.xml è anche l'id per referenziare la stessa all'interno di altri file xml. Nel file background.xml troveremo, infatti, il seguente riferimento: android:src="@drawable/background". Potete installare questa applicazione sul vostro dispositivo Android anche attareverso il seguente codice QR:

qrcode

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".