Как объявить тип предпочтений Android?
У меня есть preferences.xml, который выглядит так:
<?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>
Когда я делаю sp.getString( "sample", "3.0" ), он отлично работает и возвращает строку, но она не должна быть строкой, она должна быть плавающей. Запуск sp.getFloat( "sample", 3.0f) генерирует исключение ClassCastException, потому что это строка.
Что следует помещать в XML, чтобы предпочтение хранилось как float?
Ответы
Ответ 1
В ваших настройках xml вы можете добавить опцию android:numeric
со значением "integer"
. Таким образом, пользователь должен иметь возможность ввести действительное целочисленное значение.
При загрузке параметра вы должны попытаться разобрать его на номер самостоятельно (так как все значения сохраняются как Strings (@mbaird ниже) ):
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
}
Ответ 2
Если вы используете встроенный экран API настроек, вместо того, чтобы писать свои собственные диалоги или действия, вы немного ограничены в некоторых отношениях. Например, EditTextPreference всегда сохраняет значение в виде строки.
От API Doc:
Это предпочтение будет хранить строку в SharedPreferences.
Я отмечаю, что вам не кажется, что вы можете ограничить использование пользователем только допустимого числа с плавающей запятой в текстовом поле. Что бы вы сделали, если набрали "abc"?
Ответ 3
Как указывал mbaird, вы не можете принудительно хранить как Float.
Но вы можете изменить EditTextPreference
на простое представление Preference
и реализовать для него событие click
. Таким образом, вы сможете создать и показать свой собственный диалог, чтобы изменить значение, и, таким образом, вы можете ограничить формат и сохранить как Float в файл настроек.