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") を実行すると、正常に動作して文字列が返されますが、文字列ではなく、float である必要があります。sp.getFloat("sample", 3.0f) を実行すると、文字列であるため ClassCastException がスローされます。

プリファレンスが float として保存されるようにするには、XML に何を入力すればよいですか?

4

3 に答える 3

44

android:numeric設定xmlで、値を使用してオプションを追加できます"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このようにして、独自のダイアログを作成して表示し、値を編集することができます。したがって、フォーマットを制限して、設定ファイルに Float として保存できます。

于 2010-03-16T19:30:09.170 に答える