Android-Programmierung: Menüs
Willemers Informatik-Ecke

XML-Definition eines Menüs

Anlegen einer Menü-Ressource

Ein Menü wird durch eine XML-Datei definiert und diese ruht in den Ressourcen. Um ein Menü zu definieren, gehen Sie so vor: Man landet im Designer, der auf den ersten Blick genauso aussieht wie der Designer für das Layout. Allerdings enthält die Palette nur sehr wenige Elemente.

Erstellen eines Menüs

Aus der Palette werden Elemente Menu Item ausgewählt und auf das Display gezogen. Sie erscheinen untereinander auf dem Bildschirm. In den Attributen auf der rechten Seite kann title mit dem Eintrag gefüllt werden, der im Menü später erscheinen soll.

Als weiteres Feld kann in den Attributes id eingestellt werden, was bei der Auswertung des Menüs hilft.

Um ein Untermenü zu erstellen, wird erst ein MenuItem angelegt und dann ein Element Menu auf das Item gezogen.

Texte auslagern

Grundsätzlich sollten die Beschriftungen einer App in einer String-Ressource ausgelagert werden. Das empfindet Android-Studio ähnlich und darum findet sich im Component Tree neben jedem Element ein gelbes Warnzeichen. Klickt man darauf, erscheint ein diesbezüglicher Hinweis. Am Ende gibt es einen Button Fix, erscheint ein Dialog, der den Text in der Datei strings.xml ablegt. Dabei kann der Name und der Inhalt noch verändert werden. Statt Neu steht dann unter title @string/neu.

IDs vergeben

Neben den Texten kann den Menüpunkten eine ID vergeben werden. Das macht es einfacher, sie bei Eintreffen eines Menüereignisses zu unterscheiden.

Der XML-Code

Wenn Sie von Design auf Code umschalten, sollte der folgende Quelltext sichtbar werden.
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/mnNeu"
        android:title="@string/neu" />
    <item
        android:id="@+id/mnChange"
        android:title="@string/change" />
    <item android:title="@string/pref" >
        <menu >
            <item android:title="@string/color" />
            <item android:title="@string/number" />
        </menu>
    </item>
</menu>

Einbetten in eine Activity

Damit das Menü erscheint, wird in der Activity die Methode onCreateOptionsMenu überschrieben. Das sorgt dafür, dass oben drei Punkte erscheinen, über die das Menü erreichbar ist.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menue, menu);
    return true;
}

Auf einen Menüeintrag reagieren

Damit die Activity auf die Menüeinträge reagiert, muss sie die Methode onOptionsItemSelected überschreiben.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.mnNeu:
            // ...
            return true;
        case R.id.mnChange:
            // ...
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Links