78

En mi aplicación Android Honeycomb utilizo las pestañas como el estilo de navegación. Me gustaría agregar un elemento al lado del botón de desbordamiento, pero quiero que ese elemento sea una lista desplegable, y el usuario podrá seleccionar una opción allí, pero no relacionado con la navegación. ¿Cuál es la forma más fácil ya que estoy usando mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);Cómo agregar un elemento desplegable en la barra de acciones

¿Es posible hacerlo sin usar una vista personalizada?

+0

consultar el enlace 4: Estos enlaces ayudan para que http: //fizzylogic.azurewebsites .net/2012/03/05/mono-for-android-por-example-the-action-bar/https://github.com/StylingAndroid/StylingActionBar https://github.com/StylingAndroid/BasicActionBar – Kumar

Respuesta

206

Primera opción:

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> 

Segunda opción:

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> 

diseño/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 para recursos de menú - http://developer.android.com/guide/topics/resources/menu-resource.html

+1

Esos submenús son ag ¡consejo! Me ahorró horas de investigación y trabajo, ¡gracias! – damaxxed

+0

¡Gran respuesta! Por cierto, también puede incluir iconos en el submenú. –

+5

¿cómo respondo a un clic de la ruleta? – gregm

28

Sin duda el mejor y más simple y la respuesta que encontré hasta ahora es here.

Básicamente, no hay necesidad de diseño personalizado en este caso. Sólo hay que establecer la 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> 

Y luego manejarlo de onCreateOptionsMenu, como de costumbre:

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

Esto es, con mucho, la solución más simple y más limpio. Créditos a François Poyer, el autor original.

+0

Probado y aprobado. –

0

Funcionará como desplegable única

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

interior fragmento

setHasOptionsMenu (verdadero)

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


    super.onCreateOptionsMenu(menu, inflater); 
} 
Cuestiones relacionadas