Come aggiungere un elemento a tendina sulla barra delle azioni
Domanda
Nella mia applicazione Android Honeycomb Io uso schede come lo stile di navigazione. Vorrei aggiungere un elemento accanto al pulsante di overflow, ma voglio che punto sia un elenco a discesa, e l'utente sarà in grado di selezionare un'opzione lì, ma non legati alla navigazione. Qual è il modo più semplice dal momento che sto usando mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
E 'possibile farlo senza l'utilizzo di una visualizzazione personalizzata?
Soluzione
Prima opzione:
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>
Seconda opzione:
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" />
Documenti per risorse di menu - http://developer.android.com/guide/topics/ risorse / menu resource.html
Altri suggerimenti
Assolutamente il migliore e più semplice e la risposta che ho trovato finora è qui .
In sostanza, senza bisogno di layout personalizzato in questo caso. Basta impostare l'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>
E poi gestirlo in onCreateOptionsMenu, come al solito:
@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);
Questo è di gran lunga la soluzione più semplice e più pulita. I crediti verso François Poyer, l'autore originale.
Si lavorerà come discesa solo
<?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>
all'interno frammento
setHasOptionsMenu (true)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.chat_details_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}