How to add a drop-down item in the action bar

In the Honeycomb Android app, I use tabs as a navigation style. I would like to add one element next to the overflow button, but I want this element to be a drop-down list, and the user will be able to select an option there, but is not related to navigation. Which is the easiest way, since I use mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Can this be done without using a custom view?

+78
android android-layout android-actionbar android-3.0-honeycomb android-spinner
Nov 29 '11 at 14:23
source share
3 answers

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

The second 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 for menu resources - http://developer.android.com/guide/topics/resources/menu-resource.html

+206
Nov 29 '11 at 15:03
source share

Absolutely the best and easiest answer I have found so far is here .

Basically, in this case there is no need for a custom layout. Just install 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 required </menu> 

And then process it in onCreateOptionsMenu, as usual:

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

This is by far the simplest and cleanest solution. Credits to Francois Poyer, the original author.

+28
Jun 04 '15 at 8:57
source share

It will only work in the drop-down menu.

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

inside fragment

setHasOptionsMenu (true)

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.chat_details_menu, menu); super.onCreateOptionsMenu(menu, inflater); } 
0
Jul 28 '16 at 6:57
source share



All Articles