La gestione delle risorse tramite file XML e qualificatori
Le risorse in un’applicazione Android sono i dati che l’app utilizzerà durante la propria esecuzione. Le risorse in un’app possono essere suddivise in due categorie:
- resources, dati la cui struttura è nota al framework;
- assets, altri dati.
A differenza delle resources, gli asset non vengono gestiti e al momento della creazione del file apk per la distribuzione dell’applicazione vengono aggiunti direttamente al file; I dati contenuti in resouces vengono gestiti da un apposito manager che al momento della compilazione del progetto effettua i seguenti passi:
- Converte i file XML contenuti nella cartella res in formato binario;
- Crea una tabella di corrispondenza fra gli ID numerici e offset nel formato binario;
- Genera una classe Java (in gen/R.java) che contiene tanti campi (di tipo final static) quante sono le risorse, per ognuna memorizzerà:
- Nome del campo, ovvero il nome della risorsa (public static final);
- Inner class, il tipo della risorsa (public static final);
- Valore, ID numerico della risorsa;
- Infine compila la classe R (public final), che entra nello spazio dei nomi del progetto;
Per ogni risorsa, Android consente di definire un valore di default ed un certo numero di valori alternativi. A runtime, quando si accede alla risorsa verrà selezionata l’alternativa più specifica adatta alla situazione. Nel codice, per poter accedere al valore di una risorsa bisogna utilizzare un identificativo della risorsa che viene creato grazie al binding del framework (classe R).
I tipi di risorse che possono essere utilizzate in Android sono:
- Animation
- Bool
- Color
- Color state list
- Dimension
- Drawable
- ID
- Integer
- Integer array
- Menu
- String
- Raw (tramite API)
- Style
- Typed array
- XML (tramite API)
Come dichiare le risorse in Android
Per poter definire il valore delle risorse in Android esistono vari metodi, uno di questi è quello di utilizzare i tag XML (metodo consigliato). Ad esempio, per definire una risorsa di tipo stringa dovremo modificare il file strings.xml in res/values in questo modo:
// Risorsa "var_saluto" con valore "Hello World" // Risorsa "app_name" con valore "HelloWorldDatrevo" </resources>
<resources>
<string name="var_saluto">Hello World</string>
<string name="app_name">HelloWorldDatrevo</string>
// Valore della variabile var_saluto nel file string.xml
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/var_saluto" />
L’utilizzo dei file XML per la gestione delle risorse è vivamente consigliato in Android, in questo modo è possibile suddividere il codice vero e proprio (contenuto nei file Java in src) dai dati contenuti nella cartella res, Nella nostra prima app HelloWorldDatrevo abbiamo definito il valore delle risorse direttamente nel file .java, questo metodo è estremamente sconsigliato per svariate ragioni, una tra questa è nel caso di applicazioni multilingua. Utilizzare dei semplici file XML con i testi per ogni lingua ci consente di poter tradurre la nostra applicazione in qualsiasi lingua senza dover modificare ogni volta il codice Java.
Un altro metodo per poter definire una risorse di tipo stringa è tramite la classe R.java che viene generata automaticamente dal sistema:
public final class R {
public static final class string {
public static final int app_name=0x7f040001;
public static final int var_saluto=0x7f040000;
}
}
Qualificatori, valori alternativi delle risorse in Android
Per poter accedere ad una risorsa, bisogna conoscere il suo nome, il tipo e il package (se esterna al pacchetto). Nello specifico, in un file XML si fa riferimento ad una risorsa nel seguente modo:
Mentre in un file Java, dovremo scrivere:
In commercio si trovano dispositivi Android di ogni tipologia: con schermi grandi, schermi piccoli, con risorse hardware limitate, ecc. Per questo motivo, in Android consente di poter specificare un grande numero di valori alternativi al valore di default delle risorse. Ad esempio per le risorse di tipo layout è possibile specificare sia il layout quando il dispositivo si trova in verticale, sia il layout orizzontale per quando il dispositivo verrà inclinato. Un altro esempio sono le applicazioni tradotte in più lingue, in base al paese, l’app utilizzerà i testi tradotti nella lingua di quel paese.
Per poter specificare risorse alternative si fa uso dei cosiddetti qualificatori e si creano apposite directory in res del tipo: res/tipo_qualificatore/file_risorsa
SIM e rete. Esistono molti tipi di qualificatori, ad esempio quelli delle schede SIM e della rete, che con l’utilizzo del Mobile Country Code o del Mobile Network Code consentono l’identificazione delle stazioni cellulari degli operatori telefonici a cui i dispositivi sono collegati. Questi qualificatori utilizzano il formato -mccMCC e -mncMNC. Ad esempio, il codice -mcc222 indica l’Italia mentre il codice , -mcc222-mnc088 indica Wind Italia.
MCC | MNC | Marca | Operatore | Note |
222 | 001 | TIM | Telecom Italia | |
222 | 002 | Elsacom | Ritirato | |
222 | 010 | Vodafone | Vodafone Omnitel N.V. | |
222 | 030 | RFI | Rete Ferroviaria Italiana | |
222 | 077 | IPSE 2000 | Ritirato | |
222 | 088 | Wind | Wind Telecomunicazioni SpA | |
222 | 098 | Blu | Ritirato | |
222 | 099 | 3 Italia | Hutchison 3G |
Indice | Lezione Precedente – Lezione Successiva |
Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni
Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.
Lascia un commento