Autres types de ressources

Cette page définit les types de ressources que vous pouvez externaliser :

Valeur booléenne
Ressource XML contenant une valeur booléenne.
Couleur
Ressource XML contenant une valeur de couleur (hexadécimale).
Dimension
Ressource XML contenant une valeur de dimension (avec une unité de mesure).
ID
Ressource XML qui fournit un identifiant unique pour les ressources et les composants d'une application.
Nombre entier
Ressource XML contenant un nombre entier.
Tableau d'entiers
Ressource XML qui fournit un tableau d'entiers.
Tableau typé
Ressource XML qui fournit un objet TypedArray (que vous pouvez utiliser pour un tableau de drawables).

Valeur booléenne

Valeur booléenne définie en XML.

Remarque : une valeur booléenne est une ressource simple référencée à l'aide de la valeur fournie dans l'attribut name (et non le nom du fichier XML). Ainsi, vous pouvez combiner des ressources de valeur booléenne avec d'autres ressources simples dans le même fichier XML, dans un seul élément <resources>.

Emplacement du fichier :
res/values/filename.xml
Le nom de fichier est arbitraire. Le nom (name) de l'élément <bool> est utilisé comme ID de ressource.
Référence de la ressource :
En Java : R.bool.bool_name
En XML : @[package:]bool/bool_name
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
Éléments :
<resources>
Obligatoire. Il s'agit du nœud racine.

Aucun attribut.

<bool>
Valeur booléenne: true ou false.

Attributs :

name
Chaîne. Nom de la valeur booléenne. Ce nom est utilisé comme ID de ressource.
Exemple :
Fichier XML enregistré sous 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>

Le code d'application suivant récupère la valeur booléenne :

Kotlin

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

Java

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

Le code XML de mise en page suivant utilise la valeur booléenne suivante pour un attribut :

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

Couleur

Valeur de couleur définie en XML. La couleur est spécifiée avec une valeur RVB et un canal alpha. Vous pouvez utiliser une ressource de couleur partout où les valeurs de couleur hexadécimales sont acceptées. Vous pouvez également utiliser une ressource couleur lorsqu'une ressource drawable est attendue au format XML (par exemple, android:drawable="@color/green").

La valeur commence toujours par le caractère dièse (#), suivi des informations Alpha Rouge Vert Bleu, dans l'un des formats suivants :

  • #RVB
  • #ARVB
  • #RRVVBB
  • #AARRVVBB

Remarque : Une couleur est une ressource simple référencée par la valeur fournie dans l'attribut name (et non par le nom du fichier XML). Ainsi, vous pouvez combiner des ressources de couleur avec d'autres ressources simples dans le même fichier XML, dans un seul élément <resources>.

Emplacement du fichier :
res/values/colors.xml
Le nom de fichier est arbitraire. Le nom (name) de l'élément <color> est utilisé comme ID de ressource.
Référence de la ressource :
En Java : R.color.color_name
En XML : @[package:]color/color_name
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
Éléments :
<resources>
Obligatoire. Il s'agit du nœud racine.

Aucun attribut.

<color>
Couleur exprimée en hexadécimale.

Attributs :

name
Chaîne. Nom de la couleur. Ce nom est utilisé comme ID de ressource.
Exemple :
Fichier XML enregistré sous 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>

Le code d'application suivant récupère la ressource de couleur :

Kotlin

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

Java

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

Le code XML de mise en page suivant applique la couleur à un attribut :

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

Dimension

Valeur de dimension définie en XML. Une dimension est spécifiée par un nombre suivi d'une unité de mesure (10 px, 2 po ou 5 sp, par exemple). Les unités de mesure suivantes sont prises en charge par Android :

dp
Pixels indépendants de la densité : unité abstraite basée sur la densité physique de l'écran. Ces unités sont relatives à un écran de 160 dpi (points par pouce), sur lequel 1 dp est égal à 1 px. Sur un écran à densité plus élevée, le nombre de pixels utilisé pour tracer 1 dp est mis à l'échelle selon un facteur approprié à la résolution de l'écran.

De même, sur un écran à faible densité, le nombre de pixels utilisés pour la résolution 1 dp est réduit. Le ratio dp/pixels change avec la densité de l'écran, mais pas nécessairement en proportion directe. L'utilisation d'unités dp au lieu de px est une solution simple qui permet de redimensionner correctement les dimensions de la vue dans votre mise en page en fonction de la densité d'écran. Elle assure la cohérence des tailles réelles de vos éléments d'interface utilisateur sur différents appareils.

sp
Pixels indépendants de l'échelle : ces unités sont similaires aux dp, mais ils sont également ajustés en fonction des préférences de taille de police de l'utilisateur. Nous vous recommandons d'utiliser cette unité lorsque vous spécifiez la taille des polices. Elle sera ainsi ajustée à la fois en fonction de la densité de l'écran et des préférences de l'utilisateur.
pt
Points : 1/72 de pouce selon la taille physique de l'écran (avec une densité de 72 dpi).
px
Pixels : correspond aux pixels réels à l'écran. Nous vous déconseillons d'utiliser cette unité, car la représentation réelle peut varier d'un appareil à l'autre. Le nombre de pixels par pouce peut varier, et le nombre total de pixels disponibles sur l'écran peut être supérieur ou inférieur.
mm
Millimètres : basés sur la taille physique de l'écran.
in
Pouces : valeurs basées sur la taille physique de l'écran.

Remarque : Une dimension est une ressource simple référencée à l'aide de la valeur fournie dans l'attribut name (et non le nom du fichier XML). Vous pouvez ainsi combiner des ressources de dimension avec d'autres ressources simples dans le même fichier XML, dans un seul élément <resources>.

Emplacement du fichier :
res/values/filename.xml
Le nom de fichier est arbitraire. Le nom (name) de l'élément <dimen> est utilisé comme ID de ressource.
Référence de la ressource :
En Java : R.dimen.dimension_name
En XML : @[package:]dimen/dimension_name
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
Éléments :
<resources>
Obligatoire. Il s'agit du nœud racine.

Aucun attribut.

<dimen>
Dimension, représentée par un float, suivie d'une unité de mesure (dp, sp, pt, px, mm, in).

Attributs :

name
Chaîne. Nom de la dimension. Ce nom est utilisé comme ID de ressource.
Exemple :
Fichier XML enregistré sous 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>

Le code d'application suivant récupère une dimension :

Kotlin

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

Java

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

Le code XML de mise en page suivant applique des dimensions aux attributs :

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

ID

ID de ressource unique défini en XML. À l'aide du nom que vous indiquez dans l'élément <item>, les outils de développement Android créent un entier unique dans la classe R.java de votre projet. Vous pouvez l'utiliser comme identifiant pour les ressources d'une application (par exemple, un élément View dans votre mise en page d'interface utilisateur) ou un entier unique à utiliser dans le code de votre application (par exemple, comme ID pour une boîte de dialogue ou un code de résultat).

Remarque : Un ID est une ressource simple référencée à l'aide de la valeur fournie dans l'attribut name (et non le nom du fichier XML). Ainsi, vous pouvez combiner des ressources d'ID avec d'autres ressources simples dans le même fichier XML, dans un seul élément <resources>. De plus, une ressource d'ID ne fait pas référence à un élément de ressource réel. Il s'agit d'un ID unique que vous pouvez associer à d'autres ressources ou utiliser comme entier unique dans votre application.

Emplacement du fichier :
res/values/filename.xml
Le nom de fichier est arbitraire.
Référence de la ressource :
En Java : R.id.name
En XML : @[package:]id/name
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
Éléments :
<resources>
Obligatoire. Il s'agit du nœud racine.

Aucun attribut.

<item>
Définit un identifiant unique. N'accepte aucune valeur, uniquement des attributs.

Attributs :

type
Doit être "id".
name
Chaîne. Nom unique de l'ID.
Exemple :

Fichier XML enregistré sous 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>

L'extrait de mise en page suivant utilise l'ID "button_ok" pour un widget Button :

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

La valeur android:id n'inclut pas le signe plus dans la référence d'ID, car l'ID existe déjà, comme défini dans l'exemple ids.xml précédent. Lorsque vous spécifiez un ID pour une ressource XML à l'aide du signe plus, au format android:id="@+id/name", cela signifie que l'ID "name" n'existe pas encore et qu'il est créé.

Dans cet autre exemple, l'extrait de code suivant utilise l'ID "dialog_exit" comme identifiant unique pour une boîte de dialogue :

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

Dans la même application, l'ID "dialog_exit" est comparé lors de la création d'une boîte de dialogue :

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;
}

Nombre entier

Entier défini en XML.

Remarque : Un entier est une ressource simple référencée à l'aide de la valeur fournie dans l'attribut name (et non le nom du fichier XML). Ainsi, vous pouvez combiner des ressources d'entiers avec d'autres ressources simples dans le même fichier XML, dans un seul élément <resources>.

Emplacement du fichier :
res/values/filename.xml
Le nom de fichier est arbitraire. Le nom (name) de l'élément <integer> est utilisé comme ID de ressource.
Référence de la ressource :
En Java : R.integer.integer_name
En XML : @[package:]integer/integer_name
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
Éléments :
<resources>
Obligatoire. Il s'agit du nœud racine.

Aucun attribut.

<integer>
Nombre entier.

Attributs :

name
Chaîne. Nom de l'entier. Ce nom est utilisé comme ID de ressource.
Exemple :

Fichier XML enregistré sous 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>

Le code d'application suivant récupère un entier :

Kotlin

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

Java

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

Tableau d'entiers

Tableau d'entiers définis en XML.

Remarque : Un tableau d'entiers est une ressource simple référencée à l'aide de la valeur fournie dans l'attribut name (et non le nom du fichier XML). Vous pouvez ainsi combiner les ressources d'un tableau d'entiers avec d'autres ressources simples dans le même fichier XML, sous un seul élément <resources>.

Emplacement du fichier :
res/values/filename.xml
Le nom de fichier est arbitraire. Le nom (name) de l'élément <integer-array> est utilisé comme ID de ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un tableau d'entiers.
Référence de la ressource :
En Java : R.array.integer_array_name
En XML : @[package:]array/integer_array_name
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
Éléments :
<resources>
Obligatoire. Il s'agit du nœud racine.

Aucun attribut.

<integer-array>
Définit un tableau d'entiers. Contient un ou plusieurs éléments <item> enfants.

Attributs :

android:name
Chaîne. Nom du tableau. Ce nom est utilisé comme ID de ressource pour référencer le tableau.
<item>
Nombre entier. La valeur peut être une référence à une autre ressource de nombre entier. Doit être un enfant d'un élément <integer-array>.

Aucun attribut.

Exemple :
Fichier XML enregistré sous 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>

Le code d'application suivant récupère le tableau d'entiers :

Kotlin

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

Java

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

Tableau typé

TypedArray défini au format XML. Vous pouvez l'utiliser pour créer un tableau d'autres ressources, comme des drawables. Le tableau n'a pas besoin d'être homogène. Vous pouvez donc créer un tableau de types de ressources mixtes, mais vous devez connaître le type et l'emplacement des types de données dans le tableau pour pouvoir obtenir correctement chaque élément avec les méthodes get...() de TypedArray.

Remarque : Un tableau typé est une ressource simple référencée à l'aide de la valeur fournie dans l'attribut name (et non le nom du fichier XML). Vous pouvez ainsi combiner les ressources d'un tableau typé avec d'autres ressources simples dans le même fichier XML, sous un seul élément <resources>.

Emplacement du fichier :
res/values/filename.xml
Le nom de fichier est arbitraire. Le nom (name) de l'élément <array> est utilisé comme ID de ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément TypedArray.
Référence de la ressource :
En Java : R.array.array_name
En XML : @[package:]array/array_name
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
Éléments :
<resources>
Obligatoire. Il s'agit du nœud racine.

Aucun attribut.

<array>
Définit un tableau. Contient un ou plusieurs éléments <item> enfants.

Attributs :

android:name
Chaîne. Nom du tableau. Ce nom est utilisé comme ID de ressource pour référencer le tableau.
<item>
Ressource générique. La valeur peut être une référence à une ressource ou un type de données simple. Doit être un enfant d'un élément <array>.

Aucun attribut.

Exemple :
Fichier XML enregistré sous 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>

Le code d'application suivant récupère chaque tableau, puis obtient la première entrée dans chaque tableau :

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);