Cómo agregar un elemento desplegable en la barra de acción

En mi aplicación Android Honeycomb, utilizo Tabs como estilo de navegación. Me gustaría añadir 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 relacionada con la navegación. ¿Cuál es la manera más fácil desde que estoy usando mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

¿Es posible hacerlo sin usar una vista personalizada?

Primera opción:

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> 

Segunda opción:

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

Documentos para recursos del menú – http://developer.android.com/guide/topics/resources/menu-resource.html

Absolutamente la mejor y la respuesta más simple que encontré hasta ahora está aquí .

Básicamente, no hay necesidad de diseño personalizado en este caso. Simplemente establezca 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 en 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); s.setOnItemSelectedListener(onItemSelectedListener); 

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

Funcionará solo como desplegable

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

Fragmento interior

SetHasOptionsMenu (true)

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.chat_details_menu, menu); super.onCreateOptionsMenu(menu, inflater); } 
  • Android spinner prompt
  • Mostrar para establecer la posición de popup?
  • Spinner Dropdown CheckedTextView Autoscroll
  • ¿Cómo puedo invocar una acción en la misma selección de valor de spinner
  • setOnItemSelectedListener para spinner en Fragmento
  • Android: El elemento giratorio en el clic no funciona si ya está seleccionado
  • Android: Necesidad de cambiar el color de fondo del spinner
  • El NetworkImageView de Volley no aparece en Spinner
  • Android: Dibujo de un botón como spinner
  • Spinner onItemSelected no se llama usando Marsmallow
  • Android Spinner: Evitar las llamadas onItemSelected durante la inicialización
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.