Android,
A Complete Course, From
Basics to Enterprise Edition
Android, A Complete Course, From Basics to Enterprise
Edition
SharedPreferences et PreferenceActivity.
Cet
article est extraie du livre « Android, A Complete Course »,
disponible sur Android2ee.com.
Les
exemples ou les programmes présents dans cet ouvrage sont fournis pour
illustrer les descriptions théoriques. Ce code est libre de toute utilisation
mais n'est pas distribuable.
La
distribution du code est reservée au site :
La propriété
intellectuelle du code appartient à :
L’utilisation
de ces codes est sous votre unique responsabilité et personne d’autre que vous
ne pourra être tenu responsable des préjudices ou dommages de quelques natures
que ce soit pouvant résulter de son utilisation.
Tous
les noms de produits ou marques cités dans cet ouvrage sont des marques déposés
par leurs propriétaires respectifs.
Publié par http://android2ee.com
Titre Original : Android, A Complete Course, From
Basics to Enterprise Edition. Édition Française.
ISBN : 979-10-90388-00-0
Copyright © 2011 by Mathias Séguy
Aucune
représentation ou reproduction, même partielle, autre que celles prévues à
l’article L. 122-5 2° et 3° a) du code de la propriété intellectuelle ne peut
être faite sans l’autorisation expresse de Mathias Seguy ou, le cas échéant,
sans le respect des modalités prévues à l’article L. 122-10 dudit code
Il y a trois de niveaux de préférence, votre activité, votre application et les préférences système. Chacune s’obtient par un appel spécifique :
Pour les préférences de l’application :
Context
context
= getApplicationContext();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Pour des préférences stockées dans un fichier de votre application :
String
MY_PREF="mesPrefs";
SharedPreferences
prefs =
PreferenceManager.getSharedPreferences(MY_PREFS,Activity.MODE_PRIVATE);
Boolean
valueBool=prefs.getBoolean(key,
defaultValueBool);
Float
valueFlo=prefs.getFloat(key,
defaultValueFloat);
Integer
valueInt=prefs.getInt(key,
defaultValueInt);
Long
valueLong=prefs.getLong(key,
defaultValueLong);
String
valueStr=prefs.getString(key,
defaultValueStr);
Où key est la clef de la propriété et defaultValue** est la valeur par défaut. Si la clef n’est pas trouvée la valeur par défaut est renvoyée.
L’accès aux autres préférences n’est pas clair, il faudrait utiliser getPreference(Activity.MODE_PRIVATE) pour les préférences de l’activité et getDefaultSharedPreference pour les préférences du système.
Ces préférences se définissent au travers d’un fichier Xml, stocké sous res\xml\. Ce fichier xml est appelé par la méthode addPreferenceFromRessource(R.xml.mespreferences) qui charge dans l’objet shareReference de l’application les valeurs contenues dans ce fichier. Android dispose d’un éditeur générique pour afficher ce fichier à l’utilisateur et lui laisser les modifier. Ces préférences peuvent aussi se modifier de manière programmatique.
Une fois que vous avez récupéré votre objet SharedPreference, il suffit d’utiliser son Editor pour le modifier.
SharedPreferences.Editor
editor=prefs.edit();
editor.putBoolean(key, value);
editor.putFloat(key, value);
editor.putInt(key, value);
editor.putLong(key, value);
editor.putString(key, value);
editor.commit();
Où key est la clef (String) et value est la valeur.
Attention, si vous ne finissez pas par commit, dès que votre activité n’est plus active, vos préférences seront oubliées par l’objet sharedPreference.
Il n’y a pas grand-chose à dire, l’activité ci-dessous affiche un éditeur pour que l’utilisateur puisse modifier ces préférences :
public class
Preferences extends PreferenceActivity
{
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.userpreferences);
}
}
Vous pouvez définir dans le fichier xml vos préférences de manière à ce qu’Android les interprète et puisse les modifier de manière programmatique ou bien construire une IHM permettant à l’utilisateur de les modifier.
Ce fichier possède une structure plus ou moins complexe :
· Soit vous listez simplement vos préférences (dans ce cas, il n’y a pas de bloc PreferenceCategory et toutes vos préférences se trouvent dans le bloc PreferenceScreen)
· Soit vous les listez en mettant une structure de category, elles seront regroupées en fonction des catégories que vous avez définies.
· Soit vous faîte appel à un autre écran de préférence, dans ce cas vous rajoutez un bloc PreferenceScreen qui ouvrira un autre écran de préférence quand l’utilisateur appuiera sur la préférence à modifier.
Les préférences qui ne sont pas des CheckBox ou des RingTone ouvriront des fenêtres de dialogue.
L’exemple ci-dessous est un exemple complet, vous pouvez l’associer à l’activité précédente pour qu’elles soient affichées à l’utilisateur :
<?xml version="1.0"
encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Une Catégorie -->
<!-- Une boîte de
dialogue -->
<PreferenceCategory android:title="Simple Preference">
<CheckBoxPreference
android:key="@string/checkbox"
android:title="A checkBox
preference :"
android:summary="Check or
uncheck"
/>
<RingtonePreference
android:key="@string/ringtone"
android:title="Ring tone
preference"
android:showDefault="true"
android:showSilent="true"
android:summary="Choose a
ringTone"
/>
<!-- Une Catégorie -->
</PreferenceCategory>
<!-- Une Catégorie -->
<PreferenceCategory android:title="more details (another category)">
<!-- Un autre écran de
préférence-->
<PreferenceScreen
android:key="detail"
android:title="Details"
android:summary="More details
on another screen">
<CheckBoxPreference
android:key="@string/checkbox2"
android:title="Another checkBox"
android:summary="On or
Off"
/>
</PreferenceScreen>
</PreferenceCategory>
<!--
Une Catégorie -->
<PreferenceCategory android:title="Others simples preferences(another category)">
<EditTextPreference
android:key="@string/text"
android:title="Text editor
dialog"
android:summary="Click to open
an editor field"
android:dialogTitle="Any text is
ok"
/>
<ListPreference
android:key="@string/list"
android:title="Choice
dialog"
android:summary="Click to open
a list of choices"
android:entries="@array/i_like_array"
android:dialogTitle="Choose what
you like" />
</PreferenceCategory>
</PreferenceScreen>
Vous pouvez utiliser ce fichier de préférence avec l’activité suivante :
public class
PreferenceSimpleTuto extends PreferenceActivity {
/**
Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Avec le fichier string.xml suivant :
<?xml version="1.0"
encoding="utf-8"?>
<resources>
<string name="hello">Hello World,
PreferenceSimpleTuto!</string>
<string name="app_name">PreferenceSimpleTuto</string>
<string name="checkbox">Check Box</string>
<string name="ringtone">Ring Tone</string>
<string name="checkbox2">Check Box2</string>
<string name="text">Text</string>
<string name="list">List</string>
<string-array name="i_like_array">
<item>chocolate</item>
<item>television</item>
<item>internet</item>
<item>nicotine</item>
<item>hug</item>
<item>Santa Claus</item>
</string-array>
</resources>