Zuerst benötigen wir, wie soll es auch anders sein, eine XML-Datei: z.B. /xml/preferences.xml Inhalt: <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="mysettingkey"> <EditTextPreference android:key="setting1" android:defaultValue="Einstellung1" android:title="Titel Einstellung1"></EditTextPreference> </PreferenceScreen> danach dann noch eine passende Klase: public class preferences extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } nach dem registrieren der Klasse in der Android Manifest XML war es das eigentlich schon. Recht einfach, nicht wahr? Aber wir wollen die Settings ja auch noch abrufen: auch recht easy: SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); String einstellung1 = prefs.getString("einstellung1", "standardwert" ); und irgendwie müssen wir es noch schaffen das Menu aufzurufen: Intent settingsActivity = new Intent(getBaseContext(), preferences.class); startActivity(settingsActivity); nun denn, die Grundlagen sind erschaffen ;-) jetzt wollen wir dann aber noch die Werte entsprechend in den Summarys ausgeben. Dazu erweitern wir die Klasse um einen Listener und schreiben deshalb: public class preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener und bauen auch den Listener: public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // Let's do something a preference value changes if (key.equals("einstellung1")) { mEinstellung1.setSummary(sharedPreferences.getString("einstellung1", "")); } } mEinstellung1 fehlt jetzt aber noch: private EditTextPreference mEinstellung1; und im onCreate die Zuordnung dazu: mEinstellung1 = (EditTextPreference)getPreferenceScreen().findPreference("einstellung1"); diesen Listener müssen wir auch noch generieren... und zerstören: @Override protected void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } das war´s dann schon... beim onCreate und onResume noch Summarys ordentlich setzen und es sieht auch beim Aufrufen der Settings schön aus. z.B. mit einer Sub: private void setSummary() { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); String einstellung1 = prefs.getString("einstellung1", "standardwert" ); meinstellung1.setSummary(einstellung1); } |
