29

我有一个看起来像这样的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 中放入什么以便将首选项存储为浮点数?

4

3 回答 3

44

在您的首选项 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
}
于 2010-03-17T09:26:37.093 回答
9

如果您使用内置的首选项屏幕 API 而不是编写自己的首选项对话框或活动,那么您将在某些方面受到限制。例如,EditTextPreference 将始终将值存储为字符串。

API 文档

此首选项会将字符串存储 到 SharedPreferences 中。

我注意到您似乎没有任何方法可以限制用户只在文本字段中输入有效的浮点数。如果他们输入“abc”,你会怎么做?

于 2010-03-16T19:09:59.250 回答
4

正如 mbaird 指出的那样,您不能强制存储为 Float。

但是您可以将其更改EditTextPreference为普通Preference视图,并click为其实现事件。通过这种方式,您将能够创建并显示您自己的 Dialog 以编辑值,因此您可以限制格式并将作为 Float 保存到首选项文件中。

于 2010-03-16T19:30:09.170 回答