Ich verwende die neue v7-Appcompat-Bibliothek, die ab Android 4.3 (API-Level 18) verfügbar ist.
Unabhängig davon, was in showAsAction für einen Menüpunkt angegeben ist, wird er nicht angezeigt. Er erstellt immer das Überlaufmenüsymbol und fügt sogar einen einzelnen Menüpunkt unter das Menü ein.
Der Versuch, einer Aktivität wie dieser ein Menü hinzuzufügen:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_sizes, menu);
return true;
}
Und hier ist mein Menü xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
Ist es ein Fehler der neuen Support-Bibliothek v7 oder nur etwas falsch mit dem Code? Ich habe den ähnlichen Code schon oft mit ActionBarSherlock verwendet.
"always"
wird nicht empfohlen; es ist besser"ifRoom"
, das Betriebssystem zu verwenden und es entscheiden zu lassen."Antworten:
Wahrscheinlich fehlt Ihnen der erforderliche Namespace:
Ersetzen Sie
[yourapp]
durch Ihren App-Namen oder einen beliebigen Namespace, den Ihr Herz überall wünscht.Andere Dinge, die es wert sind, überprüft zu werden:
ActionBarActivity
Überprüfen Sie, ob das Problem weiterhin besteht.
Android-Referenzdokumentation: Hinzufügen von Aktionsschaltflächen . Hier ist der relevante Text:
quelle
showAsAction
Attribut in Android-7 nicht vorhanden war, müssen Sie Ihren App-Namespace verwendenhttp://schemas.android.com/apk/res-auto
in jedem Beispiel. Dies ist keine benutzerdefinierte oder eine App, die zu Ihrer App passt. Das ist der eigentliche Namespace aus der Dokumentation. Ich denke, jeder meint ein benutzerdefiniertes Präfix , und es kann tatsächlich sein, was immer Sie wollen. Ist das wahr?Ich habe es selbst herausgefunden. Mit der Support-Bibliothek v7 sollte showAsAction unter einem benutzerdefinierten Namespace wie folgt abgelegt werden:
quelle
Stellen Sie außerdem sicher, dass Sie in der ActionBarActivity.onCreateOptionsMenu () -Methode den richtigen Inflater verwenden.
Richtige Lösung:
Falsche Lösung:
quelle
Für Fragmente
Menüs mit benutzerdefiniertem Namespace verhindern, dass showAsAction angezeigt wird.
Mit „android:“ Präfix für showAsAction funktionieren wird, obwohl Android Studio wird bemerken Sie sollten einen benutzerdefinierten Namen Raum verwenden.
Hierbei werden Fragmente von Android SDK 22 und Support v4 verwendet, falls dies einen Unterschied macht.
quelle
tools:ignore
.Ich habe das gleiche Problem, aber unter Android 5. Ich habe 3 Elemente, aber das Betriebssystem hat mein Attribut "immer" ignoriert und nur 2 Elemente angezeigt. Hier meine Lösung:
quelle
setShowAsActionFlags()
erfordert API 14, aber dies war immer noch die beste Lösung für mich.Stellen Sie außerdem sicher, dass Sie den richtigen Pfad für den Namespace haben. Es wird keine Fehlermeldung angezeigt, wenn es falsch ist.
ich hatte
anstatt
Ich wusste nur, dass es nicht funktionierte. Ich bin mir nicht sicher, wie ich den / apk-Teil des Pfades vergessen habe, aber es ist passiert. Keine Fehlermeldung, nur ein schwer fassbarer Fehler.
quelle
In meinem Fall musste ich aus der build.gradle-Kompilierung meiner App 'com.android.support:appcompat-v7:21.0.3' entfernen.
Hinweis : My min sdk = 14, und erstelltes Projekt von Android Studio eingefügt meine unnesessary dependancy.
Nach diesem Ersetzen können Sie android schreiben: showAsAction = "immer"
quelle
Dies ist möglicherweise nicht Ihr Fall, aber ich habe verwendet
new MenuInflater(this).inflate(R.menu.my_menu, menu);
Ändern in
getMenuInflater().inflate(R.menu.my_menu, menu);
Das Problem wurde behoben!
quelle
funktioniert nicht mit supportLibraryVersion = '25 .1.0 'compileSdkVersion = 25
siehe die "Warnung"
Sollte app: showAsAction mit der Appcompat-Bibliothek mit xmlns verwenden: app = "http://schemas.android.com/apk/res-auto" weniger ... (Strg + F1)
Bei Verwendung der Appcompat-Bibliothek sollten sich die Menüressourcen auf die showAsAction im App: Namespace beziehen, nicht auf den Android: Namespace.
Wenn Sie die Appcompat-Bibliothek nicht verwenden, sollten Sie auch das Attribut android: showAsAction verwenden.
Ich denke, die Warnung kann ignoriert werden.
quelle
Fügen Sie showAsAction und actionViewClass einen solchen benutzerdefinierten Namespace hinzu:
quelle
Ich habe es durch Ersetzen gelöst
mit
Das ist menuitme xml aussehen,
quelle
Am einfachsten ist es, den Code durch Hinzufügen zu ändern
und ändern Sie diesen Code
zu
und schlussendlich
quelle