Après 2 jours de difficultés avec la nouvelle barre d'outils API 21 et appCompat_v7, je pense avoir trouvé un bug dessus. Si vous avez 2 actions sur votre menu comme ceci:
<item
Android:id="@+id/action_test"
Android:showAsAction="always"
Android:icon="@drawable/ic_launcher"
Android:title="@string/action_settings"/>
<item
Android:id="@+id/action_settings"
Android:orderInCategory="100"
Android:showAsAction="never"
Android:title="@string/action_settings"/>
et une barre d'outils appCompat définie comme ceci:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.toolbar.MainActivity" >
<Android.support.v7.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="52dp"
Android:id="@+id/toolbar">
</Android.support.v7.widget.Toolbar>
</RelativeLayout>
après gonflage (ou définition de la méthode setSupportActionBar)
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
toolbar.setTitle("esurance");
setSupportActionBar(toolbar);
vous obtiendrez le menu de la barre d'outils sans votre icône d'action, il l'affichera dans le menu de débordement.
Mais, si vous utilisez la classe Toolbar d'API 21, elle affichera vos actions telles que définies dans la disposition de votre menu ...
<Toolbar
Android:layout_width="match_parent"
Android:layout_height="52dp"
Android:id="@+id/toolbar">
</Toolbar>
Peut-être que je manque quelque chose ici, mais jusqu'à présent, je n'ai pas pu afficher les actions en dehors du menu de débordement en utilisant appCompat. Toute aide à ce sujet sera très appréciée.
Par formation Action Bar , vous devez utiliser le app:showAsAction
attributs plutôt que Android:showAsAction
attribut:
Notez que l'attribut showAsAction ci-dessus utilise un espace de noms personnalisé défini dans le
<menu>
tag. 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. Vous devez donc utiliser votre propre espace de noms comme préfixe pour tous les attributs défini par la bibliothèque de support.
Votre fichier de menu devrait donc ressembler à:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/action_test"
app:showAsAction="always"
Android:icon="@drawable/ic_launcher"
Android:title="@string/action_settings"/>
<item
Android:id="@+id/action_settings"
Android:orderInCategory="100"
app:showAsAction="never"
Android:title="@string/action_settings"/>
</menu>
utilisez d'abord le app:showAsAction
au lieu de Android:showAsAction
(comme @ianhanniballake) après cela dans onCreateActionMode
après avoir gonflé votre menu setShowAsAction
dans un code comme celui-ci
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.your_menu_name, menu);
menu.findItem(R.id.your_first_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.findItem(R.id.your_second_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
j'ai eu le même problème, donc après y avoir travaillé, ces lignes de code fonctionnent bien pour moi.
mettre
xmlns: app = "http://schemas.Android.com/apk/res-auto" int votre balise de menu
comme ça
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
puis utilisez app:showAsAction = "always"
N'oubliez pas que utilisez
app:showAsAction
dans tous les éléments de menu pasAndroid:showAsAction
"