How to add a Dropdown item on the action bar How to add a Dropdown item on the action bar android android

How to add a Dropdown item on the action bar


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


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:

@Overridepublic 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.


It will work as dropdown only

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

@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {    inflater.inflate(R.menu.chat_details_menu, menu);    super.onCreateOptionsMenu(menu, inflater);}