Как объявить тип предпочтения Android? - PullRequest
28 голосов
/ 16 марта 2010

У меня есть файл 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, чтобы предпочтение сохранялось как число с плавающей точкой?

Ответы [ 3 ]

44 голосов
/ 17 марта 2010

В ваших настройках xml вы можете добавить опцию android:numeric со значением "integer". Таким образом, пользователь должен иметь возможность только ввести действительное целое значение.

При загрузке настройки вы должны попытаться разобрать ее по числу самостоятельно (так как все значения хранятся как Строки (@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
}
9 голосов
/ 16 марта 2010

Если вы используете встроенный API экрана настроек вместо того, чтобы писать свои собственные диалоги настроек или действия, то в некоторых отношениях вы будете немного ограничены. Например, EditTextPreference всегда будет хранить значение в виде строки.

С Документ API :

Это предпочтение будет хранить строку в SharedPreferences.

Я отмечаю, что, похоже, вы не можете ограничить пользователя простым вводом действительного числа с плавающей запятой в текстовом поле. Что бы вы сделали, если бы они набрали "abc"?

4 голосов
/ 16 марта 2010

Как указал mbaird, вы не можете заставить его хранить как Float.

Но вы можете изменить EditTextPreference на обычный Preference вид и реализовать для него событие click. Таким образом, вы сможете создавать и показывать свой собственный диалог для редактирования значения, и, таким образом, вы можете ограничить формат и сохранить его как файл с плавающей точкой в ​​файле настроек.

...