So fügen Sie in der Aktionsleiste einen Dropdown -Element hinzu
Frage
In meiner Android -Wabenanwendung verwende ich Registerkarten als Navigationsstil. Ich möchte einen Element neben der Überlaufschaltfläche hinzufügen, aber ich möchte, dass dieses Element eine Dropdown -Liste ist, und der Benutzer kann dort eine Option auswählen, aber nicht mit der Navigation zusammenhängen. Was ist der einfachste Weg, seit ich benutze mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Ist es möglich, dies ohne eine benutzerdefinierte Ansicht zu tun?
Lösung
Erste Wahl:
Menü/Optionen.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:
Menü/Optionen.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
Andere Tipps
Absolut die beste und die einfachste Antwort, die ich bisher gefunden habe, ist hier.
Grundsätzlich ist in diesem Fall kein benutzerdefiniertes Layout erforderlich. Stellen Sie einfach die ActonViewClass fest:
<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 der 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. Credits an François Poyer, den ursprünglichen Autor.
Es wird nur als Dropdown funktionieren
<?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>
Innenfragment
Sethasopionsmenu (wahr)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.chat_details_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}