Instanciation des Widgets par layout XML
Le layout XML
Si vous avez déjà une expérience en JAVA, vous avez sûrement remarqué que les développeurs aiment bien utiliser les fichiers XML...
Avec Android, 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 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 JAVA.
- Facilité de modification de ces mêmes écrans sans forcement retoucher le code.
- Lisibilité du code 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 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.java. Ce fichier permettra d'accéder aux widgets depuis votre code 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:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android: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
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android: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 Android, 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 JAVA nommé R.java que vous utiliserez dans vos codes 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.