我有一个如下所示的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?
答案 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另存为首选项文件。