Ce que je veux faire, c'est que je travaille sur un programme de jeu de la vie. Je veux prendre le délai et en faire une préférence, mais je veux le rendre disponible pour que les gens puissent taper une heure spécifique. Le nombre peut être exprimé en millisecondes ou en secondes.
Cependant, je suis un peu coincé sur la façon de procéder, je n'ai pas pu trouver une préférence simple qui gère déjà cela, mais il pourrait y en avoir une. Existe-t-il un moyen facile de faire cette préférence et de confirmer que les données saisies sont un entier ou à flot?
Si vous utilisez une PreferenceActivity que vous utilisez probablement, il n'y en a pas une disponible.
Vous devrez faire quelque chose comme ceci:
/**
* 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);
}
Utilisez un EditTextPreference et définissez le type d'entrée sur TYPE_CLASS_NUMBER. Cela obligera l'utilisateur à saisir des chiffres et non des lettres.
EditTextPreference pref = (EditTextPreference)findPreference("preference_name");
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
Vous pouvez également l'appliquer avec l'attribut xml Android:numeric
. Les valeurs pertinentes possibles pour cet attribut sont decimal
et integer
.
Vous pouvez également le faire directement dans votre preferences.xml
. Quelque chose comme ça fonctionnerait:
<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" />