studio sgoliver preferencias preferencia pantalla nombre ejemplo editar crear configuracion cambiar archivos archivo activity android android-preferences preferenceactivity

sgoliver - Preferencias de números en la actividad de preferencias en Android



sharedpreferences editor (4)

Lo que quiero hacer es trabajar en un programa de juego de la vida. Quiero tomar el tiempo de espera y hacer que sea una preferencia, pero quiero que esté disponible para que las personas escriban en un momento específico. El número puede estar en milisegundos o segundos.

Sin embargo, estoy un poco atascado en cómo proceder, no he podido encontrar una preferencia simple que ya maneje esto, pero podría haber una. ¿Hay una manera fácil de hacer esta preferencia y confirmar que los datos ingresados ​​son enteros o están a flote?


Si está utilizando una actividad de preferencia que probablemente esté usando, no hay ninguna disponible.

Tendrá que hacer algo como esto:

/** * Checks that a preference is a valid numerical value */ Preference.OnPreferenceChangeListener numberCheckListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { //Check that the string is an integer. return numberCheck(newValue); } }; private boolean numberCheck(Object newValue) { if( !newValue.toString().equals("") && newValue.toString().matches("//d*") ) { return true; } else { Toast.makeText(ActivityUserPreferences.this, newValue+" "+getResources().getString(R.string.is_an_invalid_number), Toast.LENGTH_SHORT).show(); return false; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //get XML preferences addPreferencesFromResource(R.xml.user_preferences); //get a handle on preferences that require validation delayPreference = getPreferenceScreen().findPreference("pref_delay"); //Validate numbers only delayPreference.setOnPreferenceChangeListener(numberCheckListener); }


También puede imponerlo con el atributo xml android:numeric . Los posibles valores relevantes para este atributo son decimal y integer .


También puedes hacer esto directamente en tu preferences.xml . Algo como esto funcionaría:

<EditTextPreference android:defaultValue="100" android:dialogTitle="@string/pref_query_limit" android:inputType="number" android:key="pref_query_limit" android:summary="@string/pref_query_limit_summ" android:title="@string/pref_query_limit" />


Use un EditTextPreference y establezca el tipo de entrada en TYPE_CLASS_NUMBER. Esto obligará al usuario a ingresar números y no letras.

EditTextPreference pref = (EditTextPreference)findPreference("preference_name"); pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);