wake-up-neo.com

android.support.v7 mit "ActionBarActivity" wird kein Menü angezeigt

In dem neuen Update hat Google eine neue API-Unterstützungsbibliothek veröffentlicht, die die ActionBar in API Level 7 und höher unterstützt. 

Ich habe bis zu diesem Update ActionBarSherlock verwendet und den Code zum Laden des Menüs geschrieben:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);
    return true;
}

und die Menüdatei:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
        Android:title="@string/ok" Android:showAsAction="always"></item>
    <item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
        Android:title="@string/cancel" Android:showAsAction="always"></item>
</menu>

Einrichten der Menüschaltflächen in der Aktionsleiste. Dieser Code hat perfekt mit ActionBarSherlock funktioniert. Wenn ich jedoch die Aktionsleiste in die neue Unterstützungsbibliothek geändert habe, werden die Schaltflächen nicht in der Aktionsleiste angezeigt. Auch wenn sie als Android:showAsAction="always" eingestellt sind. Und wenn ich den Code debugge, gibt die Funktion menu.getSize() 2 zurück, und das ist korrekt, aber es werden keine Schaltflächen angezeigt.

Warum werden die Schaltflächen nicht in der neuen Support-Bibliothek angezeigt?

40
nrofis

Drücken Sie die MENU-Taste auf Ihrem Gerät oder Emulator und sehen Sie, ob sie im Überlauf erscheinen.

Wenn dies der Fall ist, besteht das Problem darin, dass <menu> XML geändert werden muss. Menü-XML, das mit ActionBarSherlock und der nativen API-Level 11-Funktionsleiste funktioniert, funktioniert nicht mit dem AppCompat-Aktionsleisten-Rückport.

Ihr XML-Menü müsste folgendermaßen aussehen:

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  xmlns:yourapp="http://schemas.Android.com/apk/res-auto"
>
    <item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
        Android:title="@string/ok" yourapp:showAsAction="always"></item>
    <item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
        Android:title="@string/cancel" yourapp:showAsAction="always"></item>
</menu>

Und Sie müssen dasselbe yourapp-Präfix für alle anderen Elemente verwenden, die sich auf die Aktionsleiste beziehen (z. B. yourapp:actionLayout).

Sie können dies in der Aktionsleisten-Dokumentation sehen.

104
CommonsWare

Ich möchte die Antwort etwas hinzufügen.

Wenn Sie sowohl Text als auch ein Symbol anzeigen möchten, verwenden Sie bitte withText in showAsAction Ich habe es gerade getestet; Wenn ich always oder ifRoom ohne withText verwendete, sah ich nur ein Symbol.

0
Maksim Dmitriev