В моем приложении Android Honeycomb я использую вкладки в качестве стиля навигации. Я хотел бы добавить один элемент рядом с кнопкой переполнения, но я хочу, чтобы этот элемент был раскрывающимся списком, и пользователь мог бы выбрать там вариант, но не связанный с навигацией. Каков самый простой способ, поскольку я используюmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Можно ли сделать это без использования настраиваемого представления?
Ответы:
Первый вариант:
меню / параметры.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>
Второй вариант:
меню / параметры.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.
источник
Spinner spinner = (Spinner)menu.findItem(R.id.menuPeriodType).getActionView()
вonCreateOptionsMenu()
. Затем установите прослушиватель выбора элемента.Абсолютно лучший и самый простой ответ, который я нашел до сих пор, здесь .
По сути, в этом случае нет необходимости в настраиваемом макете. Просто установите 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);
Это, безусловно, самое простое и чистое решение. Кредиты Франсуа Пойе, первоначальному автору.
источник
Он будет работать только как выпадающий
<?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); }
источник