web-dev-qa-db-fra.com

Afficher l'élément de menu toujours dans la barre d'actions de support

enter image description hereJe travaille sur Android. J'y ai implémenté la barre d'actions prise en charge. Je veux toujours afficher l'élément du menu d'options. Mais il ne s'affiche pas. Il s'affiche dans le menu déroulant. Mon code pour l'élément de menu ci-dessous.

<item
    Android:id="@+id/action_settings"
    Android:icon="@drawable/add_post"
    Android:title="@string/action_settings"

    />

Et le code de l'ActionBar Activity est donné ci-dessous: -

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

toute aide serait appréciée.

20
Nitesh Kabra

De docs vous devez ajouter l'attribut showAsAction à always ou ifRoom

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <!-- Search, should appear as action button -->
    <item Android:id="@+id/action_search"
          Android:icon="@drawable/ic_action_search"
          Android:title="@string/action_search"
          Android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item Android:id="@+id/action_settings"
          Android:title="@string/action_settings"
          Android:showAsAction="never" />
</menu>
27
Shubhank

Si vous utilisez le AppCompat ActionBar, vous devez changer votre disposition de cette façon:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:app="http://schemas.Android.com/apk/res-auto" >
    <item
        Android:id="@+id/action_settings"
        Android:icon="@drawable/add_post"
        Android:title="@string/action_settings"
        app:showAsAction="always" />
</menu>  

L'attribut showAsAction ne fonctionnera qu'avec un préfixe personnalisé, voir la documentation . Selon elle:

Notez que l'attribut showAsAction ci-dessus utilise un espace de noms 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 le cadre Android sur les appareils plus anciens).

J'espère que cela t'aides.

44
fllo

Vous pouvez utiliser les différentes valeurs de Android:showAsAction propriété dans Android ..

pour afficher tous les menus visibles dans la barre d'actions, vous devez utiliser Android:showAsAction="always" ..

Vous pouvez aussi utiliser Android:showAsAction="ifRoom" mais il affichera le menu dans la barre d'action pas toujours mais il s'affichera en fonction de la taille de l'écran.

Modifié

Ref: Les éléments du menu n'apparaissent pas dans la barre d'action

Essayez avec le code ci-dessous puis ..

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto" >
    <item
        Android:id="@+id/menu_lang"
        app:showAsAction="always" <!-- app:showAsAction="ifRoom" -->
        Android:title="@string/menu_lang"
        Android:icon="@Android:drawable/ic_input_lang"/>
</menu>

J'espère que cela vous aidera .. !!!

7
Rushabh Patel

Je me rends compte que cette question a plus de 2 ans, mais pour être complet, si vous souhaitez définir cela dans le code, utilisez ce qui suit:

menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

d'autres options sont

MenuItem.SHOW_AS_ACTION_NEVER
MenuItem.SHOW_AS_ACTION_IF_ROOM
MenuItem.SHOW_AS_ACTION_ALWAYS
MenuItem.SHOW_AS_ACTION_WITH_TEXT
MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
3
cren90

supprimer cette ligne xmlns:app="http://schemas.Android.com/apk/res-auto"

utilisation Android:showAsAction="always" au lieu de app:showAsAction="always"

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

<item
    Android:id="@+id/action_refresh"
    Android:icon="@drawable/ic_refresh"
    Android:showAsAction="ifRoom"
    Android:title="@string/action_refresh"/>

<item
    Android:id="@+id/action_filter"
    Android:icon="@drawable/ic_filter"
    Android:showAsAction="always"
    Android:title="@string/action_filter"/>
</menu>
3
Nauman Zubair