web-dev-qa-db-fra.com

Comment ajouter un élément de liste déroulante dans la barre d'action

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?

82
Paulo Barros

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

219
fhucho

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.

33
Alen Siljak

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);
}
0
Srishti Roy