Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does one declare the type of an Android preference?

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?

like image 275
David R. Avatar asked Mar 16 '10 18:03

David R.


People also ask

What is preference activity Android?

PreferencesActivity is a way to easily create preference screens such as those in Android itself, just look under Settings . These can be used inside applications to easily save preferences to SharedPreferences and then easily access these from within your app. See this page for more information on PreferenceActivity.

Where can I find preferences in Android Studio?

From the menu bar, click File > Settings (on macOS, click Android Studio > Preferences).

How do I turn off preferences on Android?

Programmatically: getPreferenceScreen(). findPreference("yourpref"). setEnabled(false);


2 Answers

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 } 
like image 60
MrSnowflake Avatar answered Sep 21 '22 18:09

MrSnowflake


If you are using the built in preferences screen API instead of writing your own preferences Dialogs or Activities, then you are going to be a bit limited in some respects. For example EditTextPreference will always store the value as a String.

From the API Doc:

This preference will store a string into the SharedPreferences.

I note that there doesn't appear to be any way for you to restrict the user to just typing in a valid floating point number in your text field. What would you do if they typed in "abc"?

like image 43
Mark B Avatar answered Sep 20 '22 18:09

Mark B