Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Black Friday: -25€ dès 75€ sur les livres en ligne, vidéos... avec le code BWEEK25. J'en profite !
  1. Livres et vidéos
  2. Android
  3. Composants avancés
Extrait - Android Guide de développement d'applications Java pour Smartphones et Tablettes (4e édition)
Extraits du livre
Android Guide de développement d'applications Java pour Smartphones et Tablettes (4e édition) Revenir à la page d'achat du livre

Composants avancés

Introduction

Si les activités vues dans le chapitre précédent sont les bases d’une application Android, il apparaît rapidement que leur utilisation seules n’est pas optimale.

L’apparition des grands écrans (tablettes, téléviseurs) a fait naître le besoin de pouvoir gérer séparément une partie de l’écran affiché à l’utilisateur. Les activités, en utilisant la totalité de l’écran, et surtout par leur caractère exclusif (une seule activité affichée à la fois), ne permettent pas cette souplesse.

Les versions 3 et 4 d’Android ont donc introduit la notion de fragments, sortes de mini-activités permettant d’exploiter pleinement les écrans de grande taille. La première section de ce chapitre leur est consacrée.

Nous étudierons ensuite les listes, très utilisées dans les applications Android. Outre l’implémentation canonique d’une liste simple, cette section présente une implémentation complète et étudie les listes déroulantes, qui en héritent directement.

Enfin, la dernière section de ce chapitre est consacrée à la création de composants personnalisés, qui permettent au développeur de se créer une véritable bibliothèque...

Fragment

L’intégration d’Android sur des appareils à écran extra large comme les tablettes tactiles a fait apparaître de nouveaux besoins, notamment celui d’utiliser pleinement, efficacement et facilement les résolutions élevées et l’espace disponible proposés par ces écrans.

Les fragments, introduits par l’API 11 (Android 3.0) et généralisés aux smartphones dans l’API 14 (Android 4.0.1), offrent une méthode simple et peu coûteuse en temps pour adapter l’affichage à cet espace disponible.

Un fragment peut être vu comme... un fragment d’activité : possédant son propre layout, il implémente lui-même le code qui gère les éléments présents dans ce layout. Ainsi, une activité peut être composée d’un ou plusieurs fragments, selon l’espace disponible sur l’écran.

Le cas d’utilisation typique des fragments est le schéma Master/Detail, que l’on peut traduire par Vue principale/Vue détaillée :

  • Un premier composant présente une liste d’éléments.

  • La sélection d’un élément - par clic - lance l’affichage d’un autre composant qui présente les données détaillées sur cet élément.

Une tablette présentant un écran assez grand, les deux composants pourront être affichés sur le même écran, alors que, pour un smartphone à l’écran plus petit, chaque composant sera affiché l’un après l’autre.

Les fragments proposent toutes les fonctionnalités pour implémenter ce schéma. 

La classe mère des fragments est la classe Fragment. À l’instar des classes filles fournies par le SDK et spécialisant la classe mère Activity, il existe des classes filles de la classe Fragment qui sont DialogFragment, ListFragment et PreferenceFragment, représentant des fragments spécialisés dans des fonctionnalités particulières.

Nous verrons dans la section Bibliothèque de support que la classe Fragment n’est pas nécessairement la classe à privilégier pour utiliser les fragments....

Liste

De par leur petite taille d’écran, les smartphones ont dû adopter une interface utilisateur à l’ergonomie spécifique. Pour cela, et comme nous l’avons vu dans le chapitre Les bases de l’interface utilisateur, la plateforme Android fournit de multiples composants graphiques. L’un des composants majeurs représentatif de la manière de naviguer dans une application est la liste d’éléments. C’est une liste verticale possédant une barre de défilement. L’utilisateur peut faire défiler la liste de haut en bas et inversement afin d’y choisir un élément.

Cette liste verticale est devenue, en quelques années, un élément quasiment incontournable d’une application Android.

La vue représentant une liste est de type ListView. La mise en place d’une liste implique également de fournir deux éléments : un layout pour l’affichage de chaque élément de la liste, et un adaptateur (Adapter, en anglais) pour la source des données.

Même si une liste peut être intégrée à toute activité, le système Android fournit un type d’activité spécifique à l’utilisation des ListView : la classe ListActivity, qui hérite de la classe Activity. L’utilisation de cette classe affranchit le développeur d’une partie du travail de mise en place d’une ListView.

Les sections qui suivent présentent les deux approches : la section Implémentation standard étudie l’utilisation d’une liste dans le cadre d’une utilisation purement standard des composants fournis par Android, et la section Implémentation spécifique présente l’ensemble des notions nécessaires à la mise en place d’une ListView entièrement spécifique.

À noter : avec l’arrivée d’Android 3.0 (API 11), adapté aux grands écrans des tablettes tactiles, une déclinaison de la classe ListActivity en fragment de type ListFragment est apparue.

Que ce soit dans le cadre d’une activité ou d’un fragment, le fonctionnement général d’une liste est le même. Nous utiliserons donc le terme liste pour cibler...

Créer ses propres composants

L’une des règles les plus importantes en matière de design applicatif est l’unicité : si une même fonctionnalité est présente dans plusieurs écrans d’une application, elle doit revêtir le même design pour tous les écrans.

Pour éviter au développeur de produire le même code à différents emplacements, le système Android offre la possibilité de concevoir ses propres composants d’interfaces, qui pourront être utilisés avec la même facilité que les composants natifs de la plateforme que sont, par exemple, les editText, les ListView, etc.

1. Surcharger un composant existant

Si le composant que l’on veut créer est très proche d’un composant existant, et s’il doit principalement étendre ses fonctionnalités, il est bien sûr recommandé de surcharger ce composant, plutôt que de créer un composant à partir d’une feuille blanche.

Tous les composants, nous l’avons vu au chapitre Les bases de l’interface utilisateur, font partie du package android.widget et peuvent être surchargés.

a. Étendre une classe du package android.widget

En règle générale, le layout du composant surchargé n’est pas lui-même modifié, les modifications qui sont faites dans ce contexte étant normalement réduites. Il suffit donc de créer une nouvelle classe, qui étendra la classe du composant que l’on a choisi, et de rajouter les méthodes de notre choix.

package fr.mondomaine.monApplication;  
  
import android.widget.AutoCompleteTextView;  
[...]   
public class MonCustomAutoComplete extends AutoCompleteTextView{  
...  
} 

Cette classe devra fournir deux constructeurs : l’un est utilisé lorsqu’une instance de la classe est déclarée dans le code, l’autre est spécifiquement utilisé lorsque le composant est déclaré dans un fichier de ressources (un fichier layout d’une activité, par exemple).

Dans les deux cas, il est obligatoire d’appeler le constructeur correspondant du parent, cet appel devant être la première instruction...