Android – PreferenceActivity et types numériques

Les activités PreferenceActivity sont super pratiques. En quelques ligne de codes, on obtient un écran de configuration/paramétrage fonctionnel.

Par contre, de prime abord, j’ai trouvé les possibilités de cette activité quand même assez limitées. En effet, on ne dispose que des classes suivants pour construire notre écran de configuration :

  • CheckBoxPreference
  • EditTextPreference
  • ListPreference
  • RingTonePreference

Pour les besoins d’un de mes développements, j’ai besoin de stocker des types numériques dans ces préférences. Voici une petite astuce que j’ai trouvée qui permet détendre les possibilités de la classe EditTextPreference. Par défaut, celle-ci permet de stocker tout type de chaîne de caractères mais il est possible de contourner cela en utilisant des attributs qui ne sont pas utilisés par défaut par la classe EditTextPreference (et qui n’apparraissent pas si l’on utilise l’auto-complétion).

En regardant le code source, j’ai remarqué que les attributs que l’on fournissait aux EditTextPreference dans le fichier XML étaient aussi utilisés par l’EditText affiché dans la boîte de dialogue de saisie. Ayant compris cela la solution saute aux yeux 🙂 Il suffit de dire à l’EditTextPreference qu’elle est de type numérique de la même façon qu’on l’aurait dit à un EditText. Voici un exemple de fichier xml de préférence avec 2 EditTextPreference (un demandant un entier et l’autre un décimal) :

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

	<EditTextPreference android:key="edittext_preference"
		android:title="Entier" android:inputType="number"
		android:dialogTitle="Entrez un entier" />

	<EditTextPreference android:key="edittext_preference"
		android:title="Décimal" android:inputType="numberDecimal"
		android:dialogTitle="Entrez un décimal" />

</PreferenceScreen>

Et voici le résultat :

On peut voir que le système nous propose le clavier pour la saisie de valeurs numériques. Et la seule valeur que l’on peut saisir est un entier (ou un décimal pour le second). De la même façon il est aussi possible de changer, la couleur, la taille, … du champs de saisie (avec les attributs android:textColor, android:textSize, …).

Par contre il faut noter une chose très importante si l’on utilise cette solution. Ce qui est stocké dans le système des préférences est une chaîne de caractères qui respecte le format numérique. Ce n’est pas un numérique. Si l’on souhaite l’utiliser dans notre application, il sera nécessaire de convertir cette chaîne dans le type qui convient en utilisant les méthodes parse des classes Integer, Double, …

Publicités

Étiquettes : , , , , , , , , , ,

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :