2010-07-08 12 views
37

Was ich tun möchte, ist ich arbeite an einem Spiel des Lebens Programm. Ich möchte die Zeitverzögerung nutzen und sie zu einer Vorliebe machen, aber ich möchte sie für bestimmte Zeiten verfügbar machen. Die Anzahl kann in Millisekunden oder Sekunden angegeben werden.Anzahl Einstellungen in Preference Aktivität in Android

Allerdings bin ich ein wenig fest auf wie weiter zu gehen, ich habe nicht in der Lage, eine einfache Präferenz zu finden, die dies bereits behandelt, aber es könnte eine sein. Gibt es eine einfache Möglichkeit, diese Präferenz zu bestätigen und zu bestätigen, dass die eingegebenen Daten eine Ganzzahl oder Flott sind?

Antwort

16

Wenn Sie eine PreferenceActivity verwenden, die Sie wahrscheinlich sind, ist keine verfügbar.

Sie müssen so etwas wie dies tun:

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

} 
+0

einzige Problem ist, delayPreference wird im Beispiel nicht definiert (es ist ein Preference ich weiß) Auch dieser Code für in der Präferenz Aktivitätsklasse ist, aber es scheint gut zu funktionieren, wir danken Ihnen viel. – Kinglink

81

ein EditTextPreference verwenden und den Eingangstyp auf TYPE_CLASS_NUMBER. Dies wird den Benutzer zwingen, Zahlen und keine Buchstaben einzugeben.

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

Dieser funktioniert und sollte Antwort auf diese Frage sein. Obwohl Punkt, Koma und andere Werte dem Benutzer angezeigt werden, kann der Benutzer ** sie ** nicht einfügen. Also nur die Eingabe, die Sie erhalten, ist numerisch. –

+26

Sie können auch 'android: inputType =" number "' verwenden, wenn Sie mit XML arbeiten. – tslocum

37

Sie können es auch mit dem XML-Attribut android:numeric erzwingen. Die möglichen relevanten Werte für dieses Attribut sind decimal und integer.

+1

'EditTextPreference' hat keinen Parameter' numeric'. –

+8

@SYLARRR Es tut. Die 'EditTextPreference' unterstützt alle Attribute von' EditText'. Und ich verwende dieses Attribut in meinem Projekt. – HRJ

+2

das hat mir eine Menge Ärger erspart - vielen Dank – bph

28

Sie können dies auch direkt in Ihrem preferences.xml tun. So etwas wie dies funktionieren würde:

<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" /> 
Verwandte Themen