Pages

jeudi 7 juin 2012

Les ressources dans un projet Android (8/x)

Une bonne pratique de programmation consiste à externaliser le maximum d’éléments dans des fichiers externes afin de les gérer indépendamment, faciliter l’internationalisation, le changement de style de votre application, son adaptation à différentes tailles et résolutions d’écran. 

Toutes les ressources d’une application Android (chaines de caractères, images, couleurs, images, layout…) se situent dans des sous-répertoire du répertoire res/ voir http://javamind-fr.blogspot.fr/2012/05/structuration-des-projets-android-4x.html

Pour chaque ressource on définit un fichier par défaut mais on peut également créer d’autres fichiers en fonction d’un critère (orientation de l’écran, taille, langue…). Par exemple vous pouvez définir des dispositions d’écrans (fichiers, layout) différents en fonction du device.

 
Par exemple
res/values/string.xml contient les chaines de caractères par défaut
res/values-fr/strings.xml les mêmes chaines en français


Vous pouvez cumuler les qualifiers (les critères)
res/drawable-small-land-stylus/
res/drawable-ja/
res/drawable/


Mais dans ce cas là le système devra faire un choix selon un ordre de priorité défini entre les différents qualifiers (code pays MCC, langage, plus petite taille, largeur, hauteur, taille de l’écran, aspect, orientation,… ). Pour plus d’information je vous oriente vers la documentation de google http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources

Faites attention de ne pas abuser des qualifiers car plus votre application en contient, plus vous devrez redoubler d’effort pour tester toutes les combinaisons possibles. L’inverse est également vrai, car une application qui s’adapte mal à l’appareil d’un utilisateur sera mal perçue.

Accéder à une ressource
L’outil AAPT (Android Asset Packaging Tool) gère l’ensemble des ressources de votre application et les compile dans une classe R. Vous pouvez donc rapidement dans votre code source accéder à n’importe quelle ressource déclarée dans les fichiers XML placés dans les sous répertoires du répertoire res.

Par exemple dans une activité si vous voulez récupérer un TextView déclarer dans un de vos fichiers layout vous pouvez écrire

TextView scoreLocalTextView = (TextView) findViewById(R.id.scoreLocalTextView);

Vous pouvez (et je dirai même vous devriez) également utiliser ces resources dans vos fichiers XML. Par exemple

@style/mainTeamStyle pour faire référence à un style
@string/team_local pour faire référence à une chaîne de caractère

Pour résumer une ressource est accessible, en la déclarant de la manière suivante
Dans le code Java [<package_name>.]R.<resource_type>.<resource_name>
Dans les fichiers XML @[<package_name>:]<resource_type>/<resource_name>

Variable
Obligatoire
Description
<resource_type> 
Oui
Type de la ressource
  • R.string.string_name : Chaine de caractères déclarée dans un fichier du répertoire res/values
  • R.color.color_name : Couleur dans un fichier du répertoire res/color
  • R.style.style_name : Style  dans un fichier du répertoire res/values
  • R.anim.anim_name : Animation dans un fichier du répertoire res/anim
  • R.drawable : graphique dans un fichier du répertoire res/drawable
  • R.menu.menu_name : élément de menu dans un fichier du répertoire res/menu
  • R.bool.bool_name : booléen définit dans res/values
  • R.dimension.dimension_name dans un fichier du répertoire res/values
  • R.integer.integer_name : entier définit dans le répertoire res/values
  • R.array.string_array_name : tableau de chaîne de caractères dans un fichier du répertoire res/values
  • R.array.integer_array_name : tableau d’entiers dans un fichier du répertoire res/values
<resource_name> 
Oui
Nom de la ressource
<package_name> 
Non
Nom du package dans laquelle la resource est déclarée

Exemple de fichier de resources

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">FeuilleDeMatch</string>
<style name="mainDispoStyle">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>
<style name="mainScoreStyle" parent="mainDispoStyle">
    <item name="android:textSize">30dp</item>
</style>
<color name="white">#ffffff</color>
<array name="sports">
    <item>Rugby</item>
    <item>Basket</item>
</array>
</resources>


Article précédent / Sommaire / Article suivant

Aucun commentaire:

Enregistrer un commentaire

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.