Pregunta

En mi aplicación Android Honeycombo uso pestañas como estilo de navegación. Me gustaría agregar un elemento al lado del botón de desbordamiento, pero quiero que ese elemento sea una lista desplegable, y el usuario podrá seleccionar una opción allí, pero no está relacionado con la navegación. ¿Cuál es la forma más fácil desde que estoy usando mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

¿Es posible hacerlo sin usar una vista personalizada?

¿Fue útil?

Solución

Primera opción:

menú/opciones.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>

Segunda opción:

menú/opciones.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>

diseño/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" />

Documentos para recursos de menú - http://developer.android.com/guide/topics/resources/menu-resource.html

Otros consejos

Absolutamente la mejor y la respuesta más simple que encontré hasta ahora es aquí.

Básicamente, no hay necesidad de diseño personalizado en este caso. Acabo de configurar el 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>

Y luego manejarlo en OnCreateePtionsMenu, como de costumbre:

@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); 

Esta es, con mucho, la solución más simple y limpia. Créditos a François Poyer, el autor original.

Funcionará solo como desplegable

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

fragmento interior

sethasoptionsmenu (verdadero)

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.chat_details_menu, menu);


    super.onCreateOptionsMenu(menu, inflater);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top