web-dev-qa-db-fra.com

Nombre de préférences dans l'activité de préférence dans Android

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?

41
Kinglink

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);

}
17
jax

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);
88
Kevin Westwood

Vous pouvez également l'appliquer avec l'attribut xml Android:numeric. Les valeurs pertinentes possibles pour cet attribut sont decimal et integer.

38
HRJ

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" />
31
Jeshurun