Як додати випадаючий елемент на панелі дій


82

У моєму додатку Android Honeycomb я використовую вкладки як стиль навігації. Я хотів би додати один елемент поруч із кнопкою переповнення, але я хочу, щоб цей елемент був випадаючим списком, і користувач зможе вибрати там параметр, але не пов’язаний з навігацією. Який найпростіший спосіб, оскільки я використовуюmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Чи можна це зробити, не використовуючи спеціальний вигляд?


Перевірте посилання 4: Ці посилання допоможуть вам fizzylogic.azurewebsites.net/2012/03/05/… github.com/StylingAndroid/StylingActionBar github.com/StylingAndroid/BasicActionBar
Кумар

Відповіді:


221

Перший варіант:

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>

Другий варіант:

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" />

Документи для ресурсів меню - http://developer.android.com/guide/topics/resources/menu-resource.html


2
Ці підменю - чудова порада! Врятували години досліджень та роботи, дякую!
damaxxed

7
як я реагую на клацання спінера?
gregm

2
Це не працює для Android 2.2. Додаток аварійно завершує роботу. У вас є рішення?
tobias

3
Використовуйте ActionBarSherlock ... вони ще не ввели ActionBar в Android 2.2, і тому ActionBarSherlock дозволяє вам датувати ці функції на дату. actionbarsherlock.com
edwoollard

4
@Sandeep Мари Ви можете отримати блешню на Spinner spinner = (Spinner)menu.findItem(R.id.menuPeriodType).getActionView()в onCreateOptionsMenu(). Потім встановіть пункт вибору слухача.
Лахіру Чандіма

34

Абсолютно найкраща та найпростіша відповідь, яку я знайшов на даний момент, є тут .

В основному, в цьому випадку немає потреби у власному макеті. Просто встановіть 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>

А потім обробіть це в onCreateOptionsMenu, як зазвичай:

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

Це на сьогоднішній день найпростіше і найчистіше рішення. Подяки Франсуа Поєру, оригінальному автору.


Перевірено та затверджено.
Гус Коста,

0

Це буде працювати лише як випадаюче меню

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

всередині фрагмент

setHasOptionsMenu (істина)

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


    super.onCreateOptionsMenu(menu, inflater);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.