Robin Walter‎ > ‎Blog‎ > ‎

Android: Wir mache ich ein richtig tolles Einstellungsmenu?

veröffentlicht um 16.01.2011 11:24 von Robin Walter   [ 16.01.2011 11:39 wurde aktualisiert. ]
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);
}



Adresse

Robin Walter
Walter-Förster-Str. 3
76316 Malsch
Tel: +49 7246 449314
Mobil: +49 1578 2432487
E-Mail: mail@robin-walter.de

Paketadresse:
Robin Walter
3181110
PACKSTATION 801
76187 Karlsruhe

That´s me: