78

Nell'applicazione Android Honeycomb utilizzo le schede come stile di navigazione. Vorrei aggiungere un elemento accanto al pulsante di overflow, ma desidero che quell'elemento sia un elenco a discesa e l'utente sarà in grado di selezionare un'opzione lì, ma non correlato alla navigazione. Qual è il modo più semplice dal momento che sto usando mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);Come aggiungere un elemento a discesa sulla barra delle azioni

E 'possibile farlo senza usare una vista personalizzata?

+0

Controllare il link 4: Questi collegamenti aiuto per voi http: //fizzylogic.azurewebsites .net/2012/03/05/mono-per-android-by-example-the-action-bar/https://github.com/StylingAndroid/StylingActionBar https://github.com/StylingAndroid/BasicActionBar – Kumar

risposta

206

Prima opzione:

menù/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> 

Seconda opzione:

menù/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" /> 

Documenti per risorse di menu - http://developer.android.com/guide/topics/resources/menu-resource.html

+1

Questi sottomenu sono ag consiglio! Mi ha risparmiato ore di ricerca e lavoro, grazie! – damaxxed

+0

Ottima risposta! A proposito, è possibile includere anche le icone nel sottomenu. –

+5

come faccio a rispondere ad un clic dello spinner? – gregm

28

Assolutamente il migliore e più semplice e la risposta che ho trovato finora è here.

Fondamentalmente, non è necessario il layout personalizzato in questo caso. Basta impostare l'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> 

E poi gestirlo in onCreateOptionsMenu, come al solito:

@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); 

Questo è di gran lunga la soluzione più semplice e più pulita. Crediti a François Poyer, l'autore originale.

+0

Testato e approvato. –

0

Funzionerà come discesa solo

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

all'interno frammento

setHasOptionsMenu (vero)

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.chat_details_menu, menu); 


    super.onCreateOptionsMenu(menu, inflater); 
} 
Problemi correlati