How does one declare the type of an Android preference?

David R. picture David R. · Mar 16, 2010 · Viewed 14.4k times · Source

I have a preferences.xml that looks like this:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
 <EditTextPreference
  android:name="Sample"
  android:enabled="true"
  android:persistent="true"
  android:summary="Sample"
  android:defaultValue="3.0"
  android:title="Sample"
  android:key="sample" />
</PreferenceScreen>

When I do sp.getString("sample", "3.0"), it works fine and returns a string, but it shouldn't be a string, it should be a float. Running sp.getFloat("sample", 3.0f) throws a ClassCastException because it is a string.

What should I put in the XML so that the preference is stored as a float?

Answer

MrSnowflake picture MrSnowflake · Mar 17, 2010

In your preferences xml you can add an option android:numeric with the value "integer". This way the user should only be able to enter a valid integer value.

When loading the setting you should try to parse it to a number yourself (as all values are stored as Strings (@mbaird below)):

try {
  float val = Float.parseFloat(sp.getString("sample", "3.0f"));
} catch (NumberFormatException e) {
  // "sample" was not an integer value
  // You should probably start settings again
}