¿Cómo se declara el tipo de preferencia de Android?
Tengo un preferences.xml que se parece a esto:
<?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>
Cuando hago sp.getString ("sample", "3.0"), funciona bien y devuelve una cadena, pero no debe ser una cadena, debe ser un flotador. Ejecutar sp.getFloat ("sample", 3.0f) lanza una ClassCastException porque es una cadena.
- Actividad de preferencia en el oyente de clics de preferencia
- Extras en el intento de correo electrónico - Preferencias XML
- ¿Se ha pulsado el botón de preferencia?
- Disposición de la pantalla de preferencias de Android
- Cómo tocar EditTextPrefences de otra actividad u otro hilo
¿Qué debo poner en el XML para que la preferencia se almacena como un flotador?
- Mostrar android: dialogMessage en un cuadro de diálogo ListPreference
- Lea SharedPreferences cuando no haya definido el nombre del archivo
- ¿Cómo obtengo las preferencias para trabajar en Android?
- Cómo vincular el archivo de preferencias automáticas a las preferencias personalizadas en android
- Android: ¿Cómo navegar de nuevo desde la sub-pantalla de preferencia a través de la barra de acción en xml?
- Instanciar una clase interna (Preferencia) en un archivo xml
- Obtener preferencias en AppWidget Provider
- Configuración de eclipse para quejarse de cadenas codificadas duras para las preferencias de Android xml
En tus preferencias xml puedes agregar una opción android:numeric
con el valor "integer"
. De esta manera, el usuario sólo debe poder introducir un valor entero válido.
Cuando cargue el ajuste, debe intentar analizarlo a un número usted mismo (ya que todos los valores se almacenan como cadenas (@mbaird a continuación)):
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 }
Si está utilizando la pantalla de preferencias en la API de la pantalla en lugar de escribir sus propias preferencias Diálogos o Actividades, entonces usted va a ser un poco limitado en algunos aspectos. Por ejemplo, EditTextPreference siempre almacenará el valor como String.
Desde el API Doc :
Esta preferencia almacenará una cadena en SharedPreferences.
Observo que no parece haber ninguna manera para que usted restrinja al usuario a apenas mecanografiar adentro un número válido del punto flotante en su campo del texto. ¿Qué harías si escribieran "abc"?
Como mbaird señaló que no puede obligar a almacenar como flotador.
Pero puede cambiar el EditTextPreference
a una vista de Preference
simple e implementar el evento de click
para ello. De esta manera podrás crear y mostrar tu propio cuadro de diálogo, para editar el valor, y así podrás restringir el formato y guardarlo como flotante en el archivo de preferencias.