Risorse alternative

Le risorse alternative sono le risorse destinate a un dispositivo specifico o a una configurazione in fase di esecuzione, ad esempio la lingua corrente, le dimensioni specifiche dello schermo o la densità di pixel. Se Android può corrispondere a una risorsa più specifica per un determinato dispositivo o configurazione rispetto alla risorsa predefinita, tale risorsa verrà invece usata. Se non trova una risorsa alternativa corrispondente alla configurazione corrente, verranno caricate le risorse predefinite. In che modo Android decide quali risorse verranno usate da un'applicazione verranno trattate in modo più dettagliato di seguito, nella sezione Località risorsa

Le risorse alternative sono organizzate come sottodirectory all'interno della cartella Resources in base al tipo di risorsa, proprio come le risorse predefinite. Il nome della sottodirectory della risorsa alternativa è nel formato: Qualificatore ResourceType-

Qualificatore è un nome che identifica una configurazione specifica del dispositivo. In un nome possono essere presenti più qualificatori, ognuno di essi separati da un trattino. Ad esempio, lo screenshot seguente mostra un progetto semplice con risorse alternative per varie configurazioni, ad esempio impostazioni locali, densità dello schermo, dimensioni dello schermo e orientamento:

Quando si aggiungono qualificatori a un tipo di risorsa, si applicano le regole seguenti:

  1. Possono essere presenti più qualificatori, con ogni qualificatore separato da un trattino.

  2. I qualificatori potrebbero essere specificati una sola volta.

  3. I qualificatori devono essere nell'ordine in cui vengono visualizzati nella tabella seguente.

I qualificatori possibili sono elencati di seguito per riferimento:

  • MCC e MNC : codice paese per dispositivi mobili (MCC) e facoltativamente il codice di rete mobile (MNC). La scheda SIM fornirà il MCC, mentre la rete a cui è connesso il dispositivo fornirà il MNC. Sebbene sia possibile impostare come destinazione le impostazioni locali usando il codice paese per dispositivi mobili, l'approccio consigliato consiste nell'usare il qualificatore lingua specificato di seguito. Ad esempio, per impostare come destinazione le risorse in Germania, il qualificatore sarà mcc262. Per impostare come destinazione le risorse per T-Mobile negli Stati Uniti, il qualificatore è mcc310-mnc026. Per un elenco completo dei codici paese per dispositivi mobili e dei codici di rete mobile, vedere http://mcc-mnc.com/.

  • Lingua: codice di lingua ISO 639-1 a due lettere e, facoltativamente, seguito dal codice dell'area ISO-3166-alpha-2 a due lettere. Se vengono forniti entrambi i qualificatori, questi vengono separati da un oggetto -r. Ad esempio, per impostare come destinazione le impostazioni locali in lingua francese, viene usato il qualificatore di fr . Per definire le impostazioni locali francesi-canadesi, verrà usato .fr-rCA Per un elenco completo dei codici linguistici e dei codici di area, vedere Codici per la rappresentazione dei nomi delle lingue e dei nomi dei paesi e degli elementi di codice.

  • Larghezza minima: specifica la larghezza dello schermo più piccola su cui deve essere eseguita l'applicazione. In dettaglio, vedere Creazione di risorse per schermi variabili. Disponibile nel livello API 13 (Android 3.2) e versioni successive. Ad esempio, il qualificatore sw320dp viene usato per i dispositivi di destinazione la cui altezza e larghezza è almeno 320dp.

  • Larghezza disponibile: larghezza minima dello schermo nel formato wNdp, dove N è la larghezza in pixel indipendenti dalla densità. Questo valore può cambiare quando l'utente ruota il dispositivo. In dettaglio, vedere Creazione di risorse per schermi variabili. Disponibile nel livello API 13 (Android 3.2) e versioni successive. Esempio: il qualificatore w720dp viene usato per i dispositivi di destinazione con una larghezza di almeno 720dp.

  • Altezza disponibile: altezza minima dello schermo nel formato hNdp, dove N è l'altezza in dp. Questo valore può cambiare quando l'utente ruota il dispositivo. In dettaglio, vedere Creazione di risorse per schermi variabili. Disponibile nel livello API 13 (Android 3.2) e versioni successive. Ad esempio, il qualificatore h720dp viene usato per i dispositivi con un'altezza di almeno 720dp

  • Dimensioni schermo: questo qualificatore è una generalizzazione delle dimensioni dello schermo per cui si trovano queste risorse. Viene descritta in modo più dettagliato in Creazione di risorse per schermi variabili. I valori consentiti sono small, normal, large e xlarge. Aggiunta nel livello API 9 (Android 2.3/Android 2.3.1/Android 2.3.2)

  • Aspetto schermo: si basa sulle proporzioni e non sull'orientamento dello schermo. Uno schermo lungo è più ampio. Aggiunta nel livello API 4 (Android 1.6). I valori possibili sono long e notlong.

  • Orientamento dello schermo: orientamento verticale o orizzontale dello schermo. Questo può cambiare durante la durata di un'applicazione. I valori possibili sono port e land.

  • Modalità dock: per i dispositivi in un dock per auto o in un dock da tavolo. Aggiunta nel livello API 8 (Android 2.2.x). I valori possibili sono car e desk.

  • Modalità notte: indica se l'applicazione è in esecuzione di notte o nel giorno. Questo può cambiare durante la durata di un'applicazione ed è progettato per offrire agli sviluppatori l'opportunità di usare versioni più scure di un'interfaccia di notte. Aggiunta nel livello API 8 (Android 2.2.x). I valori possibili sono night e notnight.

  • Densità pixel schermo (dpi): numero di pixel in una determinata area sullo schermo fisico. In genere espresso come punti per pollice (dpi). I valori possibili sono:

    • ldpi – Schermi a bassa densità.

    • mdpi – Schermi a densità media

    • hdpi – Schermi ad alta densità

    • xhdpi – Schermi ad alta densità aggiuntiva

    • nodpi - Risorse che non devono essere ridimensionate

    • tvdpi : introdotto nel livello API 13 (Android 3.2) per le schermate tra mdpi e hdpi.

  • Tipo touchscreen: specifica il tipo di touchscreen che può essere presente in un dispositivo. I valori possibili sono notouch (senza touch screen), stylus (touchscreen resistivo adatto per uno stilo) e finger (touchscreen).

  • Disponibilità della tastiera: specifica il tipo di tastiera disponibile. Questo può cambiare durante la durata di un'applicazione, ad esempio quando un utente apre una tastiera hardware. I valori possibili sono:

    • keysexposed – Il dispositivo dispone di una tastiera disponibile. Se non è abilitata alcuna tastiera software, questa viene usata solo quando viene aperta la tastiera hardware.

    • keyshidden – Il dispositivo ha una tastiera hardware, ma è nascosta e non è abilitata alcuna tastiera software.

    • keyssoft : il dispositivo dispone di una tastiera software abilitata.

  • Metodo di input di testo primario: usare per specificare i tipi di chiavi hardware disponibili per l'input. I valori possibili sono:

    • nokeys : non sono presenti chiavi hardware per l'input.

    • qwerty – È disponibile una tastiera qwerty.

    • 12key – C'è una tastiera hardware a 12 tasti

  • Disponibilità dei tasti di spostamento: per quando è disponibile lo spostamento a 5 vie o d pad (direzionale-pad). Questo può cambiare durante la durata dell'applicazione. I valori possibili sono:

    • navexposed : i tasti di spostamento sono disponibili per l'utente

    • navhidden : i tasti di spostamento non sono disponibili.

  • Metodo di spostamento non tocco principale: tipo di navigazione disponibile nel dispositivo. I valori possibili sono:

    • nonav – l'unico strumento di spostamento disponibile è il touch screen

    • dpad – è disponibile un d-pad (direzionale-pad) per la navigazione

    • trackball : il dispositivo ha un trackball per la navigazione

    • wheel – lo scenario non comune in cui sono disponibili una o più ruote direzionali

  • Versione della piattaforma (livello API): livello API supportato dal dispositivo nel formato vN, dove N è il livello API di destinazione. Ad esempio, v11 è destinato a un dispositivo di livello API 11 (Android 3.0).

Per informazioni più complete sui qualificatori di risorse, vedere Fornitura di risorse nel sito Web Android Developers.

Come Android determina quali risorse usare

È molto possibile e probabile che un'applicazione Android conterrà molte risorse. È importante comprendere in che modo Android selezionerà le risorse per un'applicazione quando viene eseguita in un dispositivo.

Android determina la base delle risorse eseguendo l'iterazione sul test di regole seguente:

  • Eliminare qualificatori contraddittori: ad esempio, se l'orientamento del dispositivo è verticale, tutte le directory delle risorse orizzontale verranno rifiutate.

  • Ignora qualificatori non supportati : non tutti i qualificatori sono disponibili per tutti i livelli API. Se una directory di risorse contiene un qualificatore non supportato dal dispositivo, la directory delle risorse verrà ignorata.

  • Identificare il qualificatore con priorità più alta successiva, facendo riferimento alla tabella precedente, selezionare il qualificatore di priorità più alto successivo (dall'alto verso il basso).

  • Mantenere tutte le directory delle risorse per il qualificatore: se sono presenti directory di risorse che corrispondono al qualificatore alla tabella precedente, selezionare il qualificatore con priorità più alta successivo (dall'alto verso il basso).

Queste regole sono illustrate anche nel diagramma di flusso seguente:

Resources flowchart

Quando il sistema cerca risorse specifiche della densità e non riesce a trovarle, tenterà di individuare altre risorse specifiche della densità e di ridimensionarle. Android potrebbe non usare necessariamente le risorse predefinite. Ad esempio, quando si cerca una risorsa a bassa densità e non è disponibile, Android può selezionare la versione ad alta densità della risorsa rispetto alle risorse predefinite o a media densità. Ciò si verifica perché la risorsa ad alta densità può essere ridotta di un fattore pari a 0,5, il che comporterà un minor numero di problemi di visibilità rispetto al ridimensionamento di una risorsa a densità media che richiederebbe un fattore pari a 0,75.

Si consideri, ad esempio, un'applicazione con le directory di risorse drawable seguenti:

drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

E ora l'applicazione viene eseguita in un dispositivo con la configurazione seguente:

  • Impostazioni locali – en-GB
  • Orientamento : porta
  • Densità dello schermo - hdpi
  • Tipo touchscreen : notouch
  • Metodo di input primario - 12key

Per iniziare, le risorse francesi vengono eliminate in conflitto con le impostazioni locali di en-GB, lasciandoci con:

drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Viene quindi selezionato il primo qualificatore dalla tabella dei qualificatori precedente: MCC e MNC. Non sono presenti directory di risorse che contengono questo qualificatore in modo che il codice MCC/MNC venga ignorato.

Viene selezionato il qualificatore successivo, ovvero Lingua. Ci sono risorse che corrispondono al codice del linguaggio. Tutte le directory di risorse che non corrispondono al codice linguistico di en vengono rifiutate, in modo che l'elenco delle risorse sia ora:

drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi

Il qualificatore successivo presente è per l'orientamento dello schermo, quindi tutte le directory delle risorse che non corrispondono all'orientamento dello schermo di port vengono eliminate:

drawable-en-port
drawable-en-port-ldpi

Di seguito è riportato il qualificatore per la densità dello schermo, ldpi, che comporta l'esclusione di un'altra directory di risorse:

drawable-en-port-ldpi

In seguito a questo processo, Android userà le risorse drawable nella directory drawable-en-port-ldpi delle risorse per il dispositivo.

Nota

I qualificatori delle dimensioni dello schermo forniscono un'eccezione a questo processo di selezione. È possibile che Android selezioni le risorse progettate per uno schermo più piccolo rispetto a quello fornito dal dispositivo corrente. Ad esempio, un dispositivo a schermo grande può usare le risorse fornite per uno schermo di dimensioni normali. Tuttavia, il contrario di questo non è vero: lo stesso dispositivo schermo grande non userà le risorse fornite per una schermata xlarge. Se Android non riesce a trovare un set di risorse corrispondente a una determinata dimensione dello schermo, l'applicazione si arresterà in modo anomalo.