Altri tipi di risorse

Questa pagina definisce i seguenti tipi di risorse che puoi esternalizzare:

Bol
Risorsa XML che trasporta un valore booleano.
Colore
Risorsa XML che trasporta un valore di colore (un colore esadecimale).
Dimensione
Risorsa XML che trasporta un valore di dimensione (con un'unità di misura).
ID
Risorsa XML che fornisce un identificatore univoco per le risorse e i componenti dell'applicazione.
Numero intero
Risorsa XML che trasporta un valore intero.
Array intero
Risorsa XML che fornisce un array di numeri interi.
Array digitato
Risorsa XML che fornisce un valore TypedArray (che puoi utilizzare per un array di disegnabili).

Bool

Un valore booleano definito in XML.

Nota: bool è una risorsa semplice a cui viene fatto riferimento utilizzando il valore fornito nell'attributo name, non il nome del file XML. Di conseguenza, puoi combinare le risorse bool con altre risorse semplici in un file XML, in un unico elemento <resources>.

percorso file:
res/values/filename.xml
Il nome del file è arbitrario. L'elemento name dell'elemento <bool> viene utilizzato come ID risorsa.
riferimento risorsa:
In Java: R.bool.bool_name
In XML: @[package:]bool/bool_name
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
:
<resources>
Obbligatorio. Questo è il nodo radice.

Nessun attributo.

<bool>
Un valore booleano: true o false.

Attributi:

name
Stringa. Un nome per il valore bool. Questo viene utilizzato come ID risorsa.
esempio:
File XML salvato in res/values-small/bools.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_small">true</bool>
    <bool name="adjust_view_bounds">true</bool>
</resources>

Il seguente codice applicazione recupera il valore booleano:

Kotlin

val screenIsSmall: Boolean = resources.getBoolean(R.bool.screen_small)

Java

Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

Il seguente file XML di layout utilizza un valore booleano per un attributo:

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

Colore

Un valore di colore definito nel file XML. Il colore viene specificato utilizzando un valore RGB e un canale alfa. Puoi usare una risorsa colore in qualsiasi punto che accetti un valore colore esadecimale. Puoi utilizzare una risorsa colore anche quando è prevista una risorsa disegnabile in XML, ad esempio android:drawable="@color/green".

Il valore inizia sempre con un carattere cancelletto (#), seguito dalle informazioni Alfa-Rosso-Verde-Blu in uno dei seguenti formati:

  • #RGB
  • #ARGB
  • N. RRGGBB
  • #AARRGGBB

Nota: un colore è una risorsa semplice a cui viene fatto riferimento tramite il valore fornito nell'attributo name, non il nome del file XML. Di conseguenza, puoi combinare le risorse colore con altre risorse semplici in un unico file XML, in un unico elemento <resources>.

percorso file:
res/values/colors.xml
Il nome del file è arbitrario. L'elemento name dell'elemento <color> viene utilizzato come ID risorsa.
riferimento risorsa:
In Java: R.color.color_name
In XML: @[package:]color/color_name
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
:
<resources>
Obbligatorio. Questo è il nodo radice.

Nessun attributo.

<color>
Un colore espresso in esadecimale.

Attributi:

name
Stringa. Il nome del colore. Questo viene utilizzato come ID risorsa.
esempio:
File XML salvato in res/values/colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Il seguente codice dell'applicazione recupera la risorsa colore:

Kotlin

val color: Int = resources.getColor(R.color.opaque_red)

Java

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

Il seguente codice XML di layout applica il colore a un attributo:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

Dimensione

Un valore di dimensione definito in XML. Una dimensione è specificata con un numero seguito da un'unità di misura, ad esempio 10 px, 2 pollici o 5 sp. Android supporta le seguenti unità di misura:

dp
Pixel indipendenti dalla densità: un'unità astratta che si basa sulla densità fisica dello schermo. Queste unità sono relative a uno schermo di 160 dpi (punti per pollice), in cui 1 dp corrisponde all'incirca a 1 px. Quando si esegue l'esecuzione su uno schermo a densità più elevata, il numero di pixel utilizzati per disegnare 1 dp viene aumentato di un fattore appropriato per i DPI dello schermo.

Analogamente, su uno schermo a bassa densità, il numero di pixel utilizzati per 1 dp viene ridotto. Il rapporto tra dps e pixel varia con la densità dello schermo, ma non necessariamente in proporzione diretta. L'utilizzo di unità dp invece di unità px è una soluzione per far sì che le dimensioni della vista nel layout vengano ridimensionate correttamente in base alle diverse densità dello schermo. Garantisce coerenza per le dimensioni reali degli elementi dell'interfaccia utente su dispositivi diversi.

sp
Pixel indipendenti dalla scala: è simile all'unità dp, ma viene ridimensionata anche in base alla preferenza relativa alle dimensioni del carattere dell'utente. Si consiglia di utilizzare questa unità per specificare le dimensioni dei caratteri, in modo che vengano regolate sia in base alla densità dello schermo sia in base alle preferenze dell'utente.
pt
Punti: 1/72 di pollice in base alle dimensioni fisiche dello schermo, supponendo che abbia una densità di 72 dpi.
px
Pixel: corrisponde ai pixel effettivi sullo schermo. Non è consigliabile utilizzare questa unità, perché la rappresentazione effettiva può variare da un dispositivo all'altro. Dispositivi diversi possono avere un numero diverso di pixel per pollice e avere più o meno pixel totali disponibili sullo schermo.
mm
Millimetri: si basano sulle dimensioni fisiche dello schermo.
in
Pollici: basati sulle dimensioni fisiche dello schermo.

Nota: una dimensione è una risorsa semplice a cui viene fatto riferimento tramite il valore fornito nell'attributo name, non il nome del file XML. Di conseguenza, puoi combinare le risorse di dimensione con altre risorse semplici in un unico file XML, in un unico elemento <resources>.

percorso file:
res/values/filename.xml
Il nome del file è arbitrario. L'elemento name dell'elemento <dimen> viene utilizzato come ID risorsa.
riferimento risorsa:
In Java: R.dimen.dimension_name
In XML: @[package:]dimen/dimension_name
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
:
<resources>
Obbligatorio. Questo è il nodo radice.

Nessun attributo.

<dimen>
Una dimensione rappresentata da un numero in virgola mobile seguito da un'unità di misura (dp, sp, pt, px, mm, in).

Attributi:

name
Stringa. Il nome della dimensione. Questo viene utilizzato come ID risorsa.
esempio:
File XML salvato in res/values/dimens.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_height">25dp</dimen>
    <dimen name="textview_width">150dp</dimen>
    <dimen name="ball_radius">30dp</dimen>
    <dimen name="font_size">16sp</dimen>
</resources>

Il seguente codice applicazione recupera una dimensione:

Kotlin

val fontSize: Float = resources.getDimension(R.dimen.font_size)

Java

Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);

Il seguente XML di layout applica le dimensioni agli attributi:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

ID

Un ID risorsa univoco definito in XML. Utilizzando il nome fornito nell'elemento <item>, gli strumenti per sviluppatori Android creano un numero intero univoco nella classe R.java del progetto, che puoi utilizzare come identificatore per le risorse di un'applicazione, ad esempio View nel layout dell'interfaccia utente, oppure un numero intero univoco da utilizzare nel codice dell'applicazione, ad esempio un ID per una finestra di dialogo o un codice risultato.

Nota: un ID è una risorsa semplice a cui viene fatto riferimento tramite il valore fornito nell'attributo name, non il nome del file XML. Di conseguenza, puoi combinare le risorse ID con altre risorse semplici in un file XML, in un unico elemento <resources>. Inoltre, una risorsa ID non fa riferimento a un elemento risorsa effettivo, ma è un ID univoco che puoi collegare ad altre risorse o utilizzare come numero intero univoco nell'applicazione.

percorso file:
res/values/filename.xml
Il nome del file è arbitrario.
riferimento risorsa:
In Java: R.id.name
In XML: @[package:]id/name
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
:
<resources>
Obbligatorio. Questo è il nodo radice.

Nessun attributo.

<item>
Definisce un ID univoco. Non prende alcun valore, ma solo attributi.

Attributi:

type
Deve essere "id".
name
Stringa. Un nome univoco per l'ID.
esempio:

File XML salvato all'indirizzo res/values/ids.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="button_ok" />
    <item type="id" name="dialog_exit" />
</resources>

Il seguente snippet di layout utilizza l'ID "button_ok" per un widget Button:

<Button android:id="@id/button_ok"
    style="@style/button_style" />

Il valore android:id qui non include il segno più nel riferimento all'ID, perché l'ID esiste già, come definito nell'esempio ids.xml precedente. Quando specifichi un ID per una risorsa XML utilizzando il segno più, nel formato android:id="@+id/name", significa che l'ID "name" non esiste ancora e viene creato.

Come ulteriore esempio, il seguente snippet di codice utilizza l'ID "dialog_exit" come identificatore univoco per una finestra di dialogo:

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

Nella stessa applicazione, l'ID "dialog_exit" viene confrontato durante la creazione di una finestra di dialogo:

Kotlin

override fun onCreateDialog(id: Int): Dialog? {
    return when(id) {
        R.id.dialog_exit -> {
            ...
        }
        else -> {
            null
        }
    }
}

Java

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case R.id.dialog_exit:
        ...
        break;
    default:
        dialog = null;
    }
    return dialog;
}

Numero intero

Un numero intero definito in XML.

Nota: un numero intero è una risorsa semplice a cui viene fatto riferimento tramite il valore fornito nell'attributo name, non il nome del file XML. Di conseguenza, puoi combinare risorse di numeri interi con altre risorse semplici in un file XML, in un unico elemento <resources>.

percorso file:
res/values/filename.xml
Il nome del file è arbitrario. L'elemento name dell'elemento <integer> viene utilizzato come ID risorsa.
riferimento risorsa:
In Java: R.integer.integer_name
In XML: @[package:]integer/integer_name
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
:
<resources>
Obbligatorio. Questo è il nodo radice.

Nessun attributo.

<integer>
Un numero intero.

Attributi:

name
Stringa. Il nome del numero intero. Questo viene utilizzato come ID risorsa.
esempio:

File XML salvato all'indirizzo res/values/integers.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="max_speed">75</integer>
    <integer name="min_speed">5</integer>
</resources>

Il seguente codice applicazione recupera un numero intero:

Kotlin

val maxSpeed: Int = resources.getInteger(R.integer.max_speed)

Java

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

Array di numeri interi

Un array di numeri interi definiti in XML.

Nota: un array di numeri interi è una risorsa semplice a cui viene fatto riferimento tramite il valore fornito nell'attributo name, non il nome del file XML. Di conseguenza, puoi combinare risorse di array di numeri interi con altre risorse semplici in un file XML, in un unico elemento <resources>.

percorso file:
res/values/filename.xml
Il nome del file è arbitrario. L'elemento name dell'elemento <integer-array> viene utilizzato come ID risorsa.
tipo di dati della risorsa compilata:
Puntatore di risorsa a un array di numeri interi.
riferimento risorsa:
In Java: R.array.integer_array_name
In XML: @[package:]array/integer_array_name
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
:
<resources>
Obbligatorio. Questo è il nodo radice.

Nessun attributo.

<integer-array>
Definisce un array di numeri interi. Contiene uno o più elementi <item> secondari.

Attributi:

android:name
Stringa. Il nome dell'array. Questo nome viene utilizzato come ID risorsa per fare riferimento all'array.
<item>
Un numero intero. Il valore può essere un riferimento a un'altra risorsa con numeri interi. Deve essere un elemento secondario di un elemento <integer-array>.

Nessun attributo.

esempio:
File XML salvato in res/values/integers.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bits">
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
    </integer-array>
</resources>

Il seguente codice applicazione recupera l'array di numeri interi:

Kotlin

val bits: IntArray = resources.getIntArray(R.array.bits)

Java

Resources res = getResources();
int[] bits = res.getIntArray(R.array.bits);

Array digitato

Un elemento TypedArray definito in XML. Puoi utilizzarlo per creare un array di altre risorse, ad esempio dei disegnabili. Non è necessario che l'array sia omogeneo, quindi puoi creare un array di tipi di risorse miste, ma fai attenzione a quali tipi di dati si trovano nell'array e a dove si trovano, in modo da ottenere correttamente ogni elemento con i metodi get...() della classe TypedArray.

Nota: un array tipizzato è una risorsa semplice a cui viene fatto riferimento tramite il valore fornito nell'attributo name, non il nome del file XML. Di conseguenza, puoi combinare le risorse array tipizzate con altre risorse semplici in un file XML, in un unico elemento <resources>.

percorso file:
res/values/filename.xml
Il nome del file è arbitrario. L'elemento name dell'elemento <array> viene utilizzato come ID risorsa.
tipo di dati della risorsa compilata:
Puntatore di risorsa a un TypedArray.
riferimento risorsa:
In Java: R.array.array_name
In XML: @[package:]array/array_name
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
:
<resources>
Obbligatorio. Questo è il nodo radice.

Nessun attributo.

<array>
Definisce un array. Contiene uno o più elementi <item> secondari.

Attributi:

android:name
Stringa. Il nome dell'array. Questo nome viene utilizzato come ID risorsa per fare riferimento all'array.
<item>
Una risorsa generica. Il valore può essere un riferimento a una risorsa o a un tipo di dati semplice. Deve essere un elemento secondario di un elemento <array>.

Nessun attributo.

esempio:
File XML salvato in res/values/arrays.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

Il seguente codice applicazione recupera ogni array e quindi ottiene la prima voce in ogni array:

Kotlin

val icons: TypedArray = resources.obtainTypedArray(R.array.icons)
val drawable: Drawable = icons.getDrawable(0)

val colors: TypedArray = resources.obtainTypedArray(R.array.colors)
val color: Int = colors.getColor(0,0)

Java

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);