it-swarm.com.de

Android-Appcompat-Aktionsleiste-Menüelement showAsAction funktioniert nicht

Ich habe einen Menüpunkt, der in Android 4.x, aber nicht in 2.x angezeigt wird. Hier ist meine menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto" >
<item
    Android:id="@+id/menu_filter"
    Android:title="Filter"
    app:showAsAction="always"/>  
</menu>

Dies ist mein Actionbar-Stil

<style name="style1_actionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="Android:background">@color/blue_dark</item>
    <item name="Android:textColor">@color/white</item>
    <item name="actionMenuTextAppearance">@color/white</item>
    <item name="background">@color/blue_dark</item>
</style>

Irgendwelche Ideen?

Bearbeiten: Doppelte Anführungszeichen entfernt

Könnte es die Tatsache sein, dass ich nur Text und keine Symbole zeige? Ich stecke hier irgendwie fest.

23

Puh, danke für deine Hilfe, aber ich habe es herausgefunden. Es war kein Problem mit der XML, es war ein Problem mit der Funktion onCreateOptionsMenu.

Ich habe das benutzt

new MenuInflater(getApplication()).inflate(R.menu.activity_wentry_editor, menu); 

an Stelle von

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_wentry_editor, menu);

Nicht ganz sicher, warum das funktioniert, aber es funktioniert.

25
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
  **xmlns:yourapp="http://schemas.Android.com/apk/res-auto"** >

    <item Android:id="@+id/action_search"
      Android:icon="@drawable/ic_action_search"
      Android:title="@string/action_search"
      **yourapp**:showAsAction="ifRoom"  />
</menu>

Bitte beachten Sie die Dokumentation. http://developer.Android.com/guide/topics/ui/actionbar.html

Verwendung von XML-Attributen aus der Support-Bibliothek

Beachten Sie, dass das obige showAsAction-Attribut einen benutzerdefinierten Namespace verwendet, der im Tag definiert ist. Dies ist erforderlich, wenn Sie XML-Attribute verwenden, die in der Support-Bibliothek definiert sind, da diese Attribute im Android-Framework auf älteren Geräten nicht vorhanden sind. Sie müssen also Ihren eigenen Namespace als Präfix für alle von der Support-Bibliothek definierten Attribute verwenden.

17
Ramesh

In meinem Fall musste ich onCreateOptionsMenu ein paar Zeilen hinzufügen. 

Android Studio hat mir bei der Verwendung von appCompat nicht erlaubt, Android: showAsAction = "ifRoom" zu verwenden.

app: showAsAction = "ifRoom" funktionierte nicht und ich konnte es problemlos entfernen.

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater  inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        for (int i = 0; i < menu.size(); i++) {
            menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        }
        return super.onCreateOptionsMenu(menu);
    }
4
Mario Eraso

Wenn Ihre App eine Aktionsleiste unter 3.0 unterstützen soll, müssen Sie app compact v7 aus der Support-Bibliothek verwenden.

Überprüfen Sie auch den Link

0
Android Learner

Wenn Sie das Menü in einer Aktivität verwenden, die AppCompact erweitert, müssen Sie den App-Kontext in XML importieren und verwenden:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" 
      xmlns:app="http://schemas.Android.com/apk/res-auto">

    <!-- "Mark Favorite", should appear as action button if possible -->
    <item
        Android:id="@+id/action_favorite"
        Android:icon="@drawable/ic_favorite_black_48dp"
        Android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, should always be in the overflow -->
    <item Android:id="@+id/action_settings"
          Android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

Grundsätzlich müssen Sie dem Menüelement in XML XML xmlns:app="http://schemas.Android.com/apk/res-auto" hinzufügen und showAsAction im folgenden Format verwenden: app:showAsAction="ifRoom"

Wenn möglich, wird das Symbol in der Aktionsleiste angezeigt.

0
Sandro Machado