Как добавить выпадающий элемент на панель действий

В моем приложении Android Honeycomb я использую вкладки в качестве стиля навигации. Я хотел бы добавить один элемент рядом с кнопкой переполнения, но я хочу, чтобы этот элемент был раскрывающимся списком, и пользователь сможет выбрать там параметр, но не связанный с навигацией. Какой самый простой способ, так как я использую mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Можно ли это сделать без использования пользовательского представления?


person Paulo Barros    schedule 29.11.2011    source источник
comment
Проверьте ссылку 4 . Эти ссылки помогут вам fizzylogic.azurewebsites.net/2012/03/05/ github.com/StylingAndroid /StylingActionBar github.com/StylingAndroid/BasicActionBar   -  person Kumar    schedule 11.10.2012


Ответы (3)


Первый вариант:

меню/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>

Second option:

меню/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>

макет/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

person fhucho    schedule 29.11.2011
comment
Эти подменю - отличный совет! Сэкономил мне часы исследований и работы, спасибо! - person damaxxed; 11.07.2012
comment
Отличный ответ! Кстати, вы также можете включить значки в подменю. - person Valentin Despa; 08.12.2012
comment
как реагировать на щелчок спиннера? - person gregm; 14.01.2013
comment
Это не работает для Android 2.2. Приложение вылетает. У тебя есть решение? - person tobias; 31.03.2013
comment
Используйте ActionBarSherlock... они не представили ActionBar еще в Android 2.2, и поэтому ActionBarSherlock позволяет вам датировать эти функции задним числом. actionbarsherlock.com - person edwoollard; 05.07.2013
comment
Можно ли одновременно установить customLayout и Submenu, я давно пытаюсь это сделать. - person Mani; 30.10.2013
comment
что произойдет, если вы находитесь в режиме навигации по вкладкам? - person Shihab Uddin; 05.06.2014
comment
что это за '@array/order' и что мы можем добавить? - person Shailendra Madda; 29.10.2014
comment
Большое спасибо, работает нормально, но мой вопрос в том, как обрабатывать OnItemSelectedListener для этого счетчика? - person sandeepmaaram; 29.11.2014
comment
@Sandeep Maram Вы можете получить счетчик Spinner spinner = (Spinner)menu.findItem(R.id.menuPeriodType).getActionView() в onCreateOptionsMenu(). Затем установите прослушиватель выбора элемента. - person Lahiru Chandima; 08.01.2015
comment
Первый вариант не работает с Android 7.0. - person CoderSpinoza; 23.11.2017

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

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

Это, безусловно, самое простое и чистое решение. Кредиты Франсуа Пойе, оригинальному автору.

person Alen Siljak    schedule 04.06.2015
comment
Проверено и одобрено. - person Gus Costa; 04.05.2016

Он будет работать только как раскрывающийся список

<?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);
}
person Srishti Roy    schedule 28.07.2016