Partager via


Principes de base des ressources Android

Presque toutes les applications Android auront une sorte de ressources dans celles-ci ; au minimum, ils ont souvent les dispositions de l’interface utilisateur sous la forme de fichiers XML. Lorsqu’une application Xamarin.Android est créée pour la première fois, les ressources par défaut sont configurées par le modèle de projet Xamarin.Android :

Les cinq fichiers qui composent les ressources par défaut ont été créés dans le dossier Resources :

  • Icon.png : icône par défaut de l’application

  • Main.axml : fichier de disposition d’interface utilisateur par défaut pour une application. Notez que si Android utilise l’extension de fichier.xml , Xamarin.Android utilise l’extension de fichier .axml .

  • Strings.xml : table de chaînes pour faciliter la localisation de l’application

  • AboutResources.txt : cette opération n’est pas nécessaire et peut être supprimée en toute sécurité. Il fournit simplement une vue d’ensemble générale du dossier Resources et des fichiers qu’il contient.

  • Resource.designer.cs : ce fichier est généré et géré automatiquement par Xamarin.Android et contient l’ID unique attribué à chaque ressource. Il s’agit d’un objet très similaire et identique au fichier R.java qu’aurait une application Android écrite en Java. Il est automatiquement créé par les outils Xamarin.Android et sera régénéré de temps à autre.

Création et accès aux ressources

La création de ressources est aussi simple que l’ajout de fichiers au répertoire pour le type de ressource en question. La capture d’écran ci-dessous montre que les ressources de chaîne pour les paramètres régionaux allemands ont été ajoutées à un projet. Lorsque Strings.xml a été ajouté au fichier, l’action de génération a été automatiquement définie sur AndroidResource par les outils Xamarin.Android :

Cela permet aux outils Xamarin.Android de compiler et d’incorporer correctement les ressources dans le fichier APK. Si, pour une raison quelconque, l’action de génération n’est pas définie sur Ressource Android, les fichiers sont exclus de l’APK, et toute tentative de chargement ou d’accès aux ressources entraîne une erreur d’exécution et l’application se bloque.

En outre, il est important de noter que si Android prend uniquement en charge les noms de fichiers minuscules pour les éléments de ressources, Xamarin.Android est un peu plus indulgent; il prend en charge les noms de fichiers majuscules et minuscules. La convention pour les noms d’images consiste à utiliser des minuscules avec des traits de soulignement comme séparateurs (par exemple, my_image_name.png). Notez que les noms de ressources ne peuvent pas être traités si des tirets ou des espaces sont utilisés comme séparateurs.

Une fois les ressources ajoutées à un projet, il existe deux façons de les utiliser dans une application : par programmation (à l’intérieur du code) ou à partir de fichiers XML.

Référencement des ressources par programmation

Pour accéder à ces fichiers par programmation, un ID de ressource unique leur est attribué. Cet ID de ressource est un entier défini dans une classe spéciale appelée Resource, qui se trouve dans le fichier Resource.designer.cs et ressemble à ceci :

public partial class Resource
{
    public partial class Attribute
    {
    }
    public partial class Drawable {
        public const int Icon=0x7f020000;
    }
    public partial class Id
    {
        public const int Textview=0x7f050000;
    }
    public partial class Layout
    {
        public const int Main=0x7f030000;
    }
    public partial class String
    {
        public const int App_Name=0x7f040001;
        public const int Hello=0x7f040000;
    }
}

Chaque ID de ressource est contenu dans une classe imbriquée qui correspond au type de ressource. Par exemple, lorsque le fichier Icon.png a été ajouté au projet, Xamarin.Android a mis à jour la Resource classe, en créant une classe imbriquée appelée Drawable avec une constante à l’intérieur nommée Icon. Cela permet au fichier Icon.png d’être référencé dans le code en tant que Resource.Drawable.Icon. La Resource classe ne doit pas être modifiée manuellement, car toutes les modifications qui y sont apportées seront remplacées par Xamarin.Android.

Lorsque vous référencez des ressources par programmation (dans le code), elles sont accessibles via la hiérarchie de la classe Resources qui utilise la syntaxe suivante :

[<PackageName>.]Resource.<ResourceType>.<ResourceName>
  • PackageName : package qui fournit la ressource et n’est requis que lorsque des ressources d’autres packages sont utilisées.

  • ResourceType : il s’agit du type de ressource imbriqué qui se trouve dans la classe Resource décrite ci-dessus.

  • Nom de la ressource : il s’agit du nom de fichier de la ressource (sans l’extension) ou de la valeur de l’attribut android:name pour les ressources qui se trouvent dans un élément XML.

Référencement de ressources à partir de XML

Les ressources d’un fichier XML sont accessibles par une syntaxe spéciale suivante :

@[<PackageName>:]<ResourceType>/<ResourceName>
  • PackageName : package qui fournit la ressource et n’est requis que lorsque des ressources d’autres packages sont utilisées.

  • ResourceType : il s’agit du type de ressource imbriqué qui se trouve dans la classe Resource.

  • Nom de la ressource : il s’agit du nom de fichier de la ressource (sans l’extension de type de fichier) ou de la valeur de l’attribut android:name pour les ressources qui se trouvent dans un élément XML.

Par exemple, le contenu d’un fichier de disposition, Main.axml, est le suivant :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <ImageView android:id="@+id/myImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/flag" />
</LinearLayout>

Cet exemple a un ImageView qui nécessite une ressource pouvant être dessinée nommée indicateur. A ImageView son src attribut défini sur @drawable/flag. Lorsque l’activité démarre, Android recherche dans le répertoire Resource/Drawable un fichier nommé flag.png (l’extension de fichier peut être un autre format d’image, comme flag.jpg) et charge ce fichier et l’affiche dans .ImageView Lorsque cette application est exécutée, elle ressemble à l’image suivante :

Imageview localisée