Module de Programmation Android (LP PRISM AirFrance)

TD7 - Préférences d'une application

Les objectifs de ce TD sont : Pour cela, nous allons juste afficher du texte, dont le style sera déterminé par les préférences.

Le début du TD (avant "Menu de préférences") sert à mettre en place l'affichage du fragment de préférences, à l'aide de manipulations de fragments comme vues au TD précédent. La suite du TD s'intéresse plus particulièrement à ce que l'API Android offre pour gérer les préférences.

Mise en place

Ouverture et fermeture du menu de préférences

Une fois que l'utilisateur aura choisi ses préférences, il voudra quitter le menu de préférences, c'est-à-dire dans notre cas détacher le fragment de type TD7ActivityFragment. Cela se fait généralement en appuyant sur le bouton de retour d'Android. Android offre la possibilité de modifier l'action sur le bouton de retour. Lorsque l'utilisateur appuie sur ce bouton, la méthode void onBackPressed() de la classe Activity (que notre activité TD7Activity surcharge) est appelée ; il suffit donc de surcharger cette méthode pour modifier le comportement du bouton de retour. Plutôt qu'utiliser une transaction pour détacher le fragment de préférences, le gestionnaire de fragments mémorise les transactions dans une structure de pile, ce qui permet de revenir facilement à l'état précédent.

Menu de préférences

Nous allons maintenant faire de notre fragment en un fragment de préférences.

Interface de préférences

Réaction au changement d'une préférence

Lorsque l'utilisateur modifie une préférence, Android appelle la méthode void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) de l'interface SharedPreferences.OnSharedPreferenceChangeListener. Il suffit d'implanter cette méthode pour réaliser les actions que l'on souhaite en fonction des préférences.

Chargement des préférences au démarrage d'une application

Ce qu'on vient de faire ne déclenche une action que lorsque l'utilisateur modifie les préférences. Au lancement de l'application, il faut lire les préférences (qui sont déjà sauvegardées) afin de la lancer selon le souhait de l'utilisateur.

La méthode SharedPreferences getDefaultSharedPreferences (Context context) de la classe PreferenceManager permet de récupérer l'ensemble des préférences, que l'on peut ensuite inspecter pour récupérer des valeurs. Par exemple, dans notre cas, on peut savoir si la case est cochée ainsi :
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    boolean b = sharedPref.getBoolean("text_size", false);

À vous de jouer

  1. Ajouter dans les préférences un bouton curseur de type SwitchPreference.
  2. Faire en sorte que ce bouton contrôle la couleur du texte "Bonjour !" (avec les couleurs de votre choix). On pourra utiliser pour cela la méthode de la classe , prenant en argument un entier étant la représentation "ARGB" ("Alpha" (transparence), "Red", "Green", "Blue") de la couleur (par exemple, la couleur noire est représentée par 0xFF000000, et la couleur rouge par 0xFFFF0000.).
  3. Ajouter dans le menu de l'activité un bouton qui restaure les paramètres par défaut. Ne pas hésiter à aller chercher dans la documentation...

Pour aller plus loin

Retirer la zone de texte contenant "Bonjour !" de l'interface de l'activité, et en faire le contenu d'une interface d'un nouveau fragment, attaché au démarrage de l'application. Faire en sorte que cliquer sur le bouton "Settings" remplace ce fragment par le fragment de préférences, et réciproquement en cliquant sur le bouton de retour.
  1. Faire en sorte que les préférences s'appliquent à l'objet de ce nouveau fragment. On aura pour cela besoin de faire communiquer deux fragments d'une même activité entre eux : on pourra s'inspirer de ce tutoriel.

Retour à la page du cours