In meiner Android Honeycomb-Anwendung verwende ich Tabs als Navigationsstil. Ich möchte ein Element neben der Überlaufschaltfläche hinzufügen, möchte jedoch, dass es sich bei diesem Element um eine Dropdown-Liste handelt, und der Benutzer kann dort eine Option auswählen, die sich jedoch nicht auf die Navigation bezieht. Was ist der einfachste Weg, seit ich mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
benutze
Ist es möglich, dies ohne eine benutzerdefinierte Ansicht zu tun?
Erste 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>
Zweite 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" />
Dokumente für Menüressourcen - http://developer.Android.com/guide/topics/resources/menu-resource.html
Absolut die beste und einfachste Antwort, die ich bisher gefunden habe, ist hier .
Grundsätzlich ist in diesem Fall kein benutzerdefiniertes Layout erforderlich. Einfach die actonViewClass setzen:
<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>
Und dann wie gewohnt in onCreateOptionsMenu damit umgehen:
@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);
Dies ist bei weitem die einfachste und sauberste Lösung. Dank an François Poyer, den ursprünglichen Autor.
Es funktioniert nur als Dropdown
<?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>
inneres Fragment
setHasOptionsMenu (true)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.chat_details_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}