I. Gestion des préférences▲
Il y a trois niveaux de préférences, votre activité, votre application et les préférences système. Chacune d'elles s’obtient par un appel spécifique.
Pour les préférences de l’application :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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.
II. Mise en place de préférences spécifiques à votre application▲
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 et permettre à l’utilisateur de le modifier. Ces préférences peuvent aussi être modifiées de manière programmatique.
I-A. Modification programmatique▲
Une fois que vous avez récupéré votre objet SharedPreference, il vous suffit d’utiliser son Editor pour le modifier.
2.
3.
4.
5.
6.
7.
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.
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.
I-B. Utilisation du fichier XML des préférences▲
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 :
2.
3.
4.
5.
6.
7.
8.
public
class
Preferences extends
PreferenceActivity {
@
Override
public
void
onCreate
(
Bundle icicle) {
super
.onCreate
(
icicle);
addPreferencesFromResource
(
R.xml.userpreferences);
}
}
I-C. Définition d'un fichier XML de préférences▲
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 faites 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 complet, vous pouvez l’associer à l’activité précédente pour que les préférences soient visibles par l’utilisateur :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
<?
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érences avec l’activité suivante :
2.
3.
4.
5.
6.
7.
8.
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 :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?
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
>
III. Remerciements▲
Cet article a été publié avec l'aimable autorisation de la société Android2EE.
Nous tenons à remercier Malick SECK pour la relecture orthographique de cet article et Mickael Baron pour la mise au format Developpez.com.