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