20
2010
[Tutoriel Android] Partie 5 – Les écrans de préférences
Une petite préférence ?
Aujourd’hui, nous allons nous attaquer au système de préférences sur la plateforme mobile Android.
Android dispose d’une classe nommée PreferenceActivity, héritant de la classe Activity permettant de créer des écrans de préférences facilement et intuitivement.
A la fin de notre tutorie,l nous arriverons à un écran de préférence de ce type :
Comme à chaque tutoriel, je vais faire en sorte d’utiliser les précédents pour vous permettre de comprendre plus facilement les diverses utilisations que l’on peut avoir de chacun d’entre eux.
Nous allons tout d’abord générer un tout nouveau projet et y ajouter un menu (vous savez quand on clique sur le bouton menu
).
Ce menu contiendra un seul bouton “Options” :
Le fichier xml se nommera menuprincipal.xml et il sera composé comme ceci :
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/itemOptions" android:title="Options"></item> </menu>
Puis, dans la classe MonActivite.java, nous allons afficher ce menu et gérer le cliquer sur le bouton :
private static int CODE_RETOUR = 1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menuprincipal, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.itemOptions) {
startActivityForResult(new Intent(this, MesPreferences.class), CODE_RETOUR);
}
return super.onOptionsItemSelected(item);
}
Comme dans le tutoriel précédent, on utilise le MenuInflater pour que le menu utilisé soit le fichier XML et on vérifie le clic sur le bouton “Options“.
Jusqu’ici rien de bien difficile, nous allons modifier le layout principal pour lui ajouter quelques TextView.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/tvLogin" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvPassword" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvRingtone" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvVibrate" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
Maintenant, nous allons travailler sur les préférences. Créons une nouvelle classe nommée MesPreferences héritant de la classe PreferenceActivity.
Ajoutons l’Override de la métode onCreate (CTRL + ESPACE sous Eclipse pour aller plus vite).
Rajoutons un fichier XML pour les préférences comme ceci :
Maintenant dans le fichier XML, nous allons rajouter les diverses informations comme ci-dessous :
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Utilisateur"> <EditTextPreference android:key="login" android:title="Nom d'utilisateur" android:summary="Entrez votre nom d'utilisateur"> </EditTextPreference> <EditTextPreference android:title="Mot de passe" android:key="password" android:summary="Entrez votre mot de passe" android:password="true"> </EditTextPreference> </PreferenceCategory> <PreferenceCategory android:title="Notifications"> <RingtonePreference android:key="sonnerie" android:title="Sonnerie de notification" android:summary="Choisissez la sonnerie pour les notifications"> </RingtonePreference> <CheckBoxPreference android:key="vibrate" android:title="Vibreur" android:summary="Vibre lors d'une notification"> </CheckBoxPreference> </PreferenceCategory> </PreferenceScreen>
On remarquera les PreferenceCategory, qui seront des conteneurs comme le LinearLayout mais avec un titre.
Puis les EditTextPreference contenant les attributs suivants :
android:key : Qui sera utilisé comme un id pour récupérer les préférences
android:title : Titre de la préférence à afficher
android:summary : Descriptif de la préférence
android:password : Définie si le champ sera un mot de passe
Les RingtonePreference permette de choisir une sonnerie installée sur le téléphone.
Les CheckBoxPreference sont comme leur nom l’indique une case à cocher.
Dans le fichier MesPreferences.java et dans la méthode onCreate que l’on a Override, nous allons charger notre fichier XML :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
La méthode addPreferencesFromResource prend en paramètre un fichier xml contenant les préférences.
Rendez-vous dans l’AndroidManisfest.xml et rajouter notre Activité dans l’onglet Application.
Lancez l’application et voyez par vous-même que lorsqu’on clique sur le bouton “Options“, la fenêtre d’activité s’ouvre et nous pouvons gérer nos informations.
Maintenant retournons dans notre activité principale et rajoutons une méthode nommée getPreferences() :
private void getPreferences() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
((TextView)findViewById(R.id.tvLogin)).setText("Nom d'utilisateur : " + preferences.getString("login", ""));
((TextView)findViewById(R.id.tvPassword)).setText("Mot de passe : " + preferences.getString("password", ""));
((TextView)findViewById(R.id.tvRingtone)).setText("Sonnerie : " + preferences.getString("sonnerie", ""));
((TextView)findViewById(R.id.tvVibrate)).setText("Vibreur : " + preferences.getBoolean("vibrate", false));
}
Pour récupérer les préférences, nous allons utiliser le PreferenceManager avec sa méthode statique getDefaultSharedPreferences prenant en paramètre notre contexte.
Cette méthode retourne un objet de type SharedPreferences stockant nos informations.
L’objet preferences contient diverses méthodes de type getString,getBoolean,getFloat,etc…, retournant l’information selon sa clef “android:key” et prend en second paramètre une valeur par défaut.
Je vous renvoie à la documentation pour plus d’information sur cette classe :
http://developer.android.com/reference/android/content/SharedPreferences.html
Maintenant, rajoutons un Override sur la méthode onActivityResult pour nous permettre de rafraichir nos données lorsque l’utilisateur valide l’écran de préférences.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CODE_RETOUR) {
Toast.makeText(this, "Modifications terminées", Toast.LENGTH_SHORT).show();
getPreferences();
}
super.onActivityResult(requestCode, resultCode, data);
}
On vérifie tout d’abord notre code de retour, puis on affiche un message pour l’utilisateur et on rafraichit l’interface utilisateur.
Lançons l’application et comme par magie quand on modifie nos informations, on les voit s’afficher !
Vous savez désormais créer un écran de préférences, nous verrons dans le prochain tutoriel la création de liste de données.
Bonne soirée à vous tous et à la prochaine !
Sources :

Articles relatifs
-
http://SiteWeb Djipe
-
http://SiteWeb Anubis
-
http://SiteWeb kaloskagatos
-
http://SiteWeb Geff
-
http://www.tombek.fr/ Tombek
-
http://SiteWeb Obli
-
http://SiteWeb Tomny
-
http://SiteWeb raphael
-
http://SiteWeb aliogan
-
http://nessccorp.fr/ BapNesS
-
Akiat
-
Akiat
-
http://naeh.net naeh
Catégories
- Andengine (5)
- Android (20)
- Application (1)
- Articles (1)
- Non classé (2)
- Programmation (30)
Nuage
Commentaires récents
- Acesyde dans [Tutoriel Android] Partie 8 – Chargement des images et données
- Rezgui Marwen dans [Tutoriel Android] Partie 8 – Chargement des images et données
- Acesyde dans [Tutoriel Android] Partie 4 – Au menu de ce soir
- Monfront A dans [Tutoriel Android] Partie 4 – Au menu de ce soir
- Acesyde dans [Tutoriel AndEngine] Partie 5 – Arrête ton char !
Archives
- janvier 2012 (2)
- novembre 2011 (1)
- octobre 2011 (3)
- juillet 2011 (3)
- juin 2011 (1)
- décembre 2010 (4)
- octobre 2010 (3)
- septembre 2010 (5)
- juillet 2010 (8)
- avril 2010 (6)

Un article de







