2010-05-04 8 views
23

Wie erhalten Sie den Standardwert einer Android-Voreinstellung in XML? Ich möchte nicht die Definition des Standardwerts im Code und in den XML-Einstellungen wiederholen.Standardwert der Android-Voreinstellung

+1

Ihre xml-Einstellungsdatei zu veröffentlichen, meinst du ein PreferenceScreen – Jorgesys

Antwort

61

Sie können Standardwert in Ressourcen (/values/bool.xml) definieren unter res/values, um ganzzahlige Konstanten zu speichern.

In prefereces.xml Referenz "@integer/default_brightness"

In Code context.getResources().getInteger(R.integer.default_brightness)

+0

Schöne Methode, dies zu tun. Danke für das Teilen! – pilcrowpipe

+5

Genau das habe ich gesucht, danke. Ein weiterer Hinweis: Definieren Sie die Ressourcen nicht in strings.xml, sondern in einer separaten Datei (z. B. constants.xml), um eine Lokalisierung zu vermeiden. – schnatterer

+6

@schnatterer: Wenn Sie die Strings in eine andere Datei verschieben, vermeiden Sie eine Lokalisierung. Der Dateiname 'strings.xml' ist nur eine Konvention. Jede Ressource kann lokalisiert werden, indem sie in den richtigen Unterordner 'res /' gestellt wird. Es ist wahrscheinlich eine gute Idee, die Standardeinstellungen in eine separate Ressourcendatei zu platzieren. –

11

Zuerst müssen Sie Standardwerte in Ihrer XML-Voreinstellungsdatei definieren. Dann können Sie die Einstellungen mit den Standardwerten in der Hauptaktivität bevölkern durch den Aufruf:

PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

Wenn Sie eine gewisse Präferenz abrufen müssen nur anrufen:

int value = prefs.getInt("key", null); 

Da Ihre Präferenzen bevölkert sind, werden Sie nicht erhalten null Wert.

<resources> 
    <bool name="mypreference_default">true</bool> 
</resources> 

Verwenden Sie den Wert im preferences.xml:

<CheckBoxPreference 
    android:defaultValue="@bool/mypreference_default" 
    android:key="mypreference" 
    android:title="@string/mypreference_title" /> 

Dann nutzen Sie in den Code ein:

SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context); 
Boolean value = context.getResources().getBoolean(R.bool.mypreference_default); 
Boolean b = p.getBoolean("mypreference", value); 
+2

Dies funktioniert immer noch nicht gegen die mögliche Situation zu schützen, wo jemand die Linie von der Präferenz entfernt unten XML und vergisst, den Java-Code zu aktualisieren, der es anfordert. In diesem Fall kompiliert die Anwendung weiterhin, aber Sie erhalten eine NullPointerException. – idolize

+0

Ja, das stimmt, aber dann sollte ein Funktionstest geschrieben werden, um zu testen, ob alle benötigten Einstellungen aus XML abgerufen werden. – pixel

+1

das funktionierte überhaupt nicht für mich. Die Standardwerte wurden nach dem Aufruf dieser Methode nicht festgelegt. – moonlightcheese

Verwandte Themen