如何声明Android偏好的类型?

时间:2010-03-16 18:54:54

标签: android preferences classcastexception

我有一个如下所示的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?

3 个答案:

答案 0 :(得分:43)

在您的偏好设置xml中,您可以添加值为android:numeric的选项"integer"。这样,用户应该只能输入有效的整数值。

加载设置时,您应该尝试自己将其解析为一个数字(因为所有值都存储为Strings(下面的@mba)):

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
}

答案 1 :(得分:10)

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

来自the API Doc

  

此首选项将存储字符串   进入SharedPreferences。

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

答案 2 :(得分:4)

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

但您可以将EditTextPreference更改为普通Preference视图,并为其实施click事件。这样您就可以创建和显示自己的Dialog,以便编辑值,因此您可以限制格式并将Float另存为首选项文件。