Sistemi Mobili e Wireless Android - Risorse Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it
Risorse in Android In Android, le risorse sono file esterni (non scritti in Java) accessibili da codice (o da altri file di risorsa) ed integrati nell'applicazione in fase di compilazione Android supporta risorse di tipo differente, inclusi file XML, PNG, JPG, etc. La maggior parte delle risorse utilizzate da Android serve a generare interfacce utente in modo dichiarativo al fine di separare l'ui dalla logica delle applicazioni e facilitarne la modifica/manutenzione e l'adattamento a dispositivi diversi Quando sono integrate nell'applicazione, le risorse vengono trasformate in formati efficienti dal punto di vista dell'immagazzinamento e del caricamento 2
Risorse in Android Il sistema di gestione delle risorse in Android tiene traccia di tutti gli asset diversi dal codice associati ad un'applicazione Per poter utilizzare una risorsa è necessario inserirla nella posizione corretta della struttura di directory di un progetto In particolare, le risorse vengono inserite nelle sottodirectory appropriate della directory /res dei progetti Gli strumenti di sviluppo Android creano automaticamente una classe wrapper chiamata R che può essere sfruttata per fare riferimento alle risorse nel codice Java 3
Tipi di risorse in Android 4
Risorse string in /values Risorse di tipo string rappresentano stringhe di testo e vengono definite tramite elementi <string> contenuti all'interno di un elemento <resources> Di solito, tali risorse sono inserite all'interno del file strings.xml (il nome del file non è importante, è anche possibile suddividere tali risorse su più file) 5
Risorse color in /values Risorse di tipo color rappresentano colori e vengono definite tramite elementi <color> contenuti all'interno di un elemento <resources> Di solito, tali risorse sono inserite all'interno del file colors.xml (il nome del file non è importante) I colori possono essere specificati tramite sintassi #RGB, #ARGB, #RRGGBB, #AARRGGBB 6
Risorse dimension in /values Risorse di tipo dimension rappresentano dimensioni e vengono definite tramite elementi <dimen> contenuti all'interno di un elemento <resources> Di solito, tali risorse sono inserite all'interno del file dimens.xml (il nome del file non è importante) 7
Risorse string array in /values Risorse di tipo string array rappresentano array di stringhe di testo e vengono definite tramite elementi <string-array> contenuti all'interno di un elemento <resources>. I singoli elementi dell'array vengono definiti tramite elementi <item> inseriti all'interno dell'elemento <string-array>. Di solito, tali risorse sono inserite all'interno del file arrays.xml (il nome del file non è importante) 8
Risorse style in /values Risorse di tipo style permettono di definire lo stile (i valori di un insieme di attributi) di una View, un'activity o un'intera applicazione. Uno stile viene definito mediante un element <style> all'interno dell'elemento <resources>. Di solito, tali risorse sono inserite all'interno del file styles.xml (il nome del file non è importante) 9
Altre risorse in /values Oltre alle risorse precedenti, nella cartella /values è possibile inserire anche risorse di tipo integer (valori interi, elemento <integer>) integer array (array di interi, elemento <integer-array> con <item> interni) bool (valori booleani true e false, elemento <bool>) typed array (array di altre risorse, elemento <array> con <item> interni) 10
Risorse color state list Risorse di tipo color state list permettono di definire quale colore applicare ad una View in base allo stato della View Ogni colore viene definito all'interno di un elemento <item> contenuto in un elemento <selector> Questo tipo di risorse viene inserito all'interno della cartella /color 11
Risorse drawable Risorse di tipo drawable permettono di definire risorse grafiche da visualizzare a schermo Il tipo più comune di risorse drawable sono file.png,.jpg, o.gif inseriti all'interno della cartella /drawable Esistono anche diversi tipi di drawable che vengono definiti mediante file.xml (sempre inseriti in /drawable) E' possibile ad esempio definire una risorsa di tipo drawable state list per modificare l'immagine associata ad una View a seconda dello stato della View (esattamente come viene fatto per color state list ma usando l'attributo android:drawable al posto di android:color all'interno degli elementi <item> 12
Risorse in R All'interno del file R.java, le singole risorse vengono identificate tramite un ID per alcune risorse (es: immagini o file di layout) l'id dipende dal path e dal nome dei relativi file (es: l'id della risorsa res/layout/main.xml è R.layout.main) risorse come le stringhe vengono inserite all'interno di un unico file (strings.xml) e identificate tramite l'attributo name (l'id diventa R.string.<valore di name >) alcune risorse (es: i singoli widget definiti all'interno di un file di layout) possono essere identificati esplicitamente tramite l'attributo android:id (l'id diventa R.id.<valore di android:id >) 13
Risorse in R 14
Risorse in R File R.java generato a partire dalle risorse presenti nella slide precedente 15
Accedere alle risorse Per accedere alle risorse di un'applicazione da codice Java si può utilizzare la classe Resources L'istanza di Resources associata ad un'applicazione si può ottenere attraverso il metodo Context.getResources() Resources contiene diversi metodi per recuperare risorse di tipo diverso a partire dal loro ID Diverse classi (es: i vari widget) contengono metodi che consentono di passare direttamente l'id di una risorsa (senza dover recuperare la risorsa tramite Resources) 16
Accedere alle risorse Accedere alle risorse da Java: file di layout stringhe arrays.xml immagini array Esempio di creazione adapter a partire da risorsa 17
Accedere alle risorse E' anche possibile fare riferimento a risorse all'interno di altre risorse 18
Risorse alternative Separare le risorse dal codice permette di creare risorse alternative per diverse configurazioni di dispositivo (schermo, lingua, etc.) Le risorse alternative vengono inserite in sottodirectory della directory /res, il cui nome è costituito dal nome di default di una specific directory di risorse (ad es., res/layout per i file di layout) a cui viene aggiuneto un suffisso che indica una configurazione (ad es., res/layout-land per i file di layout su schermo in modalità landscape) Le risorse corrette vengono utilizzate in modo automatico dal sistema a seconda della configurazione utilizzata 19
Risorse alternative Esempi di risorse alternative Screen orientation (port, land) Language and region (en, fr, it, en-rus, ) Night mode (night, not night) Screen pixel density (ldpi, mdpi, hdpi, ) Touchscreen type (notouch, stylus, finger) E' possibile specificare suffissi multipli per le stesse risorse (ma in un ordine specifico, vedi documentazione android) es. drawable-en-rus-land, drawable-port-hdpi Se ci sono risorse alternative, Android cerca il best match rispetto alla configurazione corrente. Se non c'è best match, vengono usate le risorse di default. 20