Instanciation des Widgets par layout XML
Le layout XML
Si vous avez déjà une expérience en JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.), vous avez sûrement remarqué que les développeurs aiment bien utiliser les fichiers XML...
Avec AndroidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...), même principe: abus des fichiers XML.
La raison est cependant (souvent hélas) légitime. Dans notre cas, il s'agit de séparer le dessin d'un écran du code JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) associé.
Cette solution est maintenant très souvent utilisée dans les interfaces d'autres environnements graphiques.
Les avantages sont alors nombreux:
- Possibilité de donner le dessin des écrans à des graphistes qui ne connaissent pas forcement JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.).
- Facilité de modification de ces mêmes écrans sans forcement retoucher le code.
- Lisibilité du code JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) puisqu'il n'est pas innondé par des lignes de codes équivalentes pour dessiner ce même écran.
- ...
Je disais hélas, car souvent, lorsque l'on débarque dans le monde JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.), on se retouve bien vite perdu dans tous ces fichiers XML éparpillés un peu partout !
Heureusement, dans le cas d'android, il existe un outil permettant de renseigner ces fichiers XML de façon quasi transparents (contrairement à d'autres environnements !).
Ces fichiers XML seront ensuite repris par l'outil aapt pour générer un fichier source R.javaLangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.). Ce fichier permettra d'accéder aux widgets depuis votre code JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.).
Exemple de fichier XML
Vous commencez par définir la version XML et l'encodage:
<?xml version="1.0" encoding="utf-8"?>
Puis vous indiquerez le type de layout et ses
attributs.
Par exemple:
<LinearLayout xmlns:androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...)="http://schemas.androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...).com/apk/res/android"
androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):layout_width="fill_parent"
androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):layout_height="fill_parent"
androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):orientation="vertical" >
S'en suivra une série de widgets qui seront des fils de LinearLayout. Ils vont donc hériter automatiquement de la déclaration de LinearLayout.
Par exemple déclaration d'un label (widget TextView)
<TextView
androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):layout_width="fill_parent"
androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):layout_height="wrap_content"
androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):text="@string/texte" />
Il ne faut pas oublier de fermer la balise layout, et voilà:
</LinearLayout>
Utilisation d'un layout XML dans du code JAVA
Sous AndroidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...), les layouts sont à sauver sous /res/layout.
Si vous sauvez ce fichier sous par exemple le nom main.xml dans le répertoire res/layout de votre projet, vous allez pouvoir l'utiliser dans une activité.
Pour cela, vous placerez dans la méthode onCreate un appel à setContentView de la manière suivante:
setContentView(R.layout.main);
En effet, le nom du fichier (sans extention .xml) va servir d'identifiant de la ressource du layout. Cette méthode va permettre le chargement de votre fichier XML pour construire l'interface utilisateur de votre activité.
Comme déjà indiqué précédemment, les layouts XML sont repris et l'aapt va produire un code JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) nommé R.javaLangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) que vous utiliserez dans vos codes javaLangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) pour accéder à ces widgets.
R.layout.main se lit donc comme ceci:
Utilisation de la classe R, il s'agit ici d'afficher votre layout qui fait parti de l'ensemble des ressources de type layouts d'où le R.layout. Votre layout a été déclaré dans un fichier nommé main.xml, c'est ce nom de fichier qui sera utilisé dans la Classe R d'où au final le R.layout.main.