Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add a Dropdown item on the action bar

In my Android Honeycomb application I use Tabs as the navigation style. I would like to add one item next to the overflow button, but I want that item to be a dropdown list, and the user will be able to select an option there, but not related to navigation. What is the easiest way since I'm using mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Is it possible to do it without using a custom view?

like image 959
Paulo Barros Avatar asked Nov 29 '11 14:11

Paulo Barros


People also ask

How do I add items to Action Bar?

To add actions to the action bar, create a new XML file in your project's res/menu/ directory. The app:showAsAction attribute specifies whether the action should be shown as a button on the app bar.

How do I customize my action bar?

This example demonstrate about how to create a custom action bar in Android. Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml.


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

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

like image 190
fhucho Avatar answered Sep 25 '22 02:09

fhucho


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

Basically, no need for custom layout in this case. Just set the 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> 

And then handle 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 François Poyer, the original author.

like image 30
Alen Siljak Avatar answered Sep 23 '22 02:09

Alen Siljak