Скрытие и отображение значков панели действий с помощью виджета поиска

Обычный шаблон, который я вижу во многих приложениях, предоставляющих некоторые функции поиска, заключается в том, чтобы виджет поиска очищал другие значки меню от панели действий. Это работает для меня прямо сейчас, просто используя ifRoom для showAsAction в моих пунктах меню. Однако я хотел бы показать больше пунктов меню на панели действий, потому что кажется, что ActionBar очень консервативен в том, как он определяет ifRoom, и, следовательно, по крайней мере один важный пункт меню выталкивается в переполнение (возможно, кто-то умнее меня знает, почему они сделай это).

Итак, как я могу установить showAsAction как always, в то же время удаляя элементы меню с панели действий, когда виджет поиска активирован? Когда я пытаюсь сделать это сейчас, пункты меню не перемещаются, а виджет поиска сжимается.

Вот мое меню:

  <item
  android:id="@+id/action_search"
  android:icon="@drawable/ic_action_search"
  android:title="@string/action_search"
  android:showAsAction="collapseActionView|always"
  android:actionViewClass="android.widget.SearchView" />

 <item
  android:id="@+id/action_stores"
  android:title="@string/action_stores"
  android:icon="@drawable/ic_action_stores"
  android:showAsAction="always" />

 <item 
   android:id="@+id/action_shopping_lists"
   android:title="@string/action_shopping_lists"
   android:icon="@drawable/ic_action_lists"
   android:showAsAction="always" />

<item
    android:id="@+id/action_preferences"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never"/>

Мой файл searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
            android:label="@string/app_name"
            android:hint="@string/search_hint" >
</searchable>

person settheline    schedule 19.08.2014    source источник


Ответы (1)


Не могли бы вы установить onClickListener на search widget, который затем запустит несколько строк кода, чтобы другой MenuItems изменился с 'always' на 'ifRoom'?

Несколько строк кода в onClickListener будут содержать что-то вроде этого:

myMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

тогда как myMenuItem — это ваш MenuItem, который должен перейти от «always» к «ifRoom». Вы можете изменить его позже соответствующим методом.

person REG1    schedule 19.08.2014