Dans mon Android application Honeycomb, j’utilise les onglets comme style de navigation. J'aimerais ajouter un élément à côté du bouton de débordement, mais je souhaite que cet élément soit une liste déroulante. être en mesure de sélectionner une option ici, mais sans rapport avec la navigation. Quel est le moyen le plus simple puisque j'utilise mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Est-il possible de le faire sans utiliser une vue personnalisée?
Première option:
menu/options.xml:
<item
Android:icon="@drawable/ic_menu_sort"
Android:showAsAction="ifRoom">
<menu>
<item
Android:id="@+id/menuSortNewest"
Android:title="Sort by newest" />
<item
Android:id="@+id/menuSortRating"
Android:title="Sort by rating" />
</menu>
</item>
Seconde option:
menu/options.xml:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:id="@+id/menuSort"
Android:showAsAction="ifRoom"
Android:actionLayout="@layout/action_sort" />
</menu>
layout/action_sort.xml:
<Spinner xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_menu_refresh"
Android:entries="@array/order" />
Docs pour les ressources de menu - http://developer.Android.com/guide/topics/resources/menu-resource.html
Absolument la meilleure et la réponse la plus simple que j'ai trouvée jusqu'à présent est ici .
Fondamentalement, pas besoin de mise en page personnalisée dans ce cas. Il suffit de définir actonViewClass:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:yourapp="http://schemas.Android.com/apk/res-auto" >
<item Android:id="@+id/spinner"
yourapp:showAsAction="ifRoom"
yourapp:actionViewClass="Android.widget.Spinner" /> <== this is all that's required
</menu>
Et puis manipulez-le dans onCreateOptionsMenu, comme d'habitude:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_layout, menu);
MenuItem item = menu.findItem(R.id.spinner);
Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); // get the spinner
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(onItemSelectedListener);
C'est de loin la solution la plus simple et la plus propre. Crédits à François Poyer, l'auteur original.
Cela fonctionnera comme liste déroulante seulement
<?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/save_contact"-->
<!--Android:icon="@drawable/edit_new"-->
<!--Android:title="Save Contact"-->
<!--app:showAsAction="never" />-->
<item
Android:id="@+id/send_money"
Android:icon="@drawable/edit_new"
Android:title="Send Money"
app:showAsAction="never" />
<item
Android:id="@+id/request_money"
Android:icon="@drawable/edit_new"
Android:title="Request money"
app:showAsAction="never" />
<item
Android:id="@+id/recharge"
Android:icon="@drawable/edit_new"
Android:title="Recharge"
app:showAsAction="never" />
</menu>
fragment intérieur
setHasOptionsMenu (true)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.chat_details_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}