web-dev-qa-db-fra.com

Élément de menu de la barre d'action appcompat Android showAsAction ne fonctionne pas

J'ai un élément de menu qui apparaît sur Android 4.x mais pas sur 2.x. Voici mon 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>

C'est mon style d'actionbar

<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>

Des idées?

Edit: suppression de la double citation typo

Serait-ce le fait que je ne montre que du texte, pas d'icônes? Je suis un peu coincé ici.

23
pickle_inspector

Whew, merci pour votre aide les gars, mais j'ai réussi à comprendre. Ce n'était pas un problème avec le XML, c'était un problème avec la fonction onCreateOptionsMenu.

J'utilisais ceci

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

au lieu de cela

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

Pas tout à fait sûr pourquoi cela fonctionne, mais ça marche.

25
pickle_inspector
<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>

Veuillez vous référer à la documentation. http://developer.Android.com/guide/topics/ui/actionbar.html

Utilisation d'attributs XML de la bibliothèque de support

Notez que l'attribut showAsAction ci-dessus utilise un espace de nom personnalisé défini dans la balise. Cela est nécessaire lorsque vous utilisez des attributs XML définis par la bibliothèque de support, car ces attributs n'existent pas dans la structure Android sur les anciens périphériques. Vous devez donc utiliser votre propre espace de noms comme préfixe pour tous les attributs définis par la bibliothèque de support.

17
Ramesh

Dans mon cas, j'ai dû ajouter quelques lignes à onCreateOptionsMenu. 

Android Studio ne m'a pas laissé utiliser Android: showAsAction = "ifRoom" lors de l'utilisation d'appCompat.

app: showAsAction = "ifRoom" ne fonctionnait pas et je l'ai supprimé sans problèmes.

    @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

Si vous souhaitez que votre application prenne en charge la barre d'actions inférieure à 3.0, vous devez utiliser app compact v7 à partir de la bibliothèque de prise en charge.

Vérifiez également le link

0
Android Learner

En utilisant le menu dans une activité qui étend AppCompact, il est nécessaire d'importer le contexte d'application dans le XML et de l'utiliser:

<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>

Ce que vous devez faire, en gros, c’est d’ajouter xmlns:app="http://schemas.Android.com/apk/res-auto" à l’élément de menu de votre XML et d’utiliser le paramètre showAsAction au format suivant: app:showAsAction="ifRoom"

Cela affichera l'icône dans la barre d'action, si possible.

0
Sandro Machado