Подтвердить что ты не робот

Как объявить тип предпочтений 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?

4b9b3361

Ответ 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 в файл настроек.