Показать ActionBarSherlock SearchView всегда расширяется

Мне нужно показать, что SearchView всегда был расширен и еще одна кнопка в ActionBar, чтобы дать пользователю быстрый доступ к строке поиска в Activity Activity.
У меня есть этот макет меню для моей деятельности:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="always" android:actionViewClass="com.actionbarsherlock.widget.SearchView"/> <item android:id="@+id/action_configure" android:title="@string/action_configure" android:icon="@android:drawable/ic_menu_preferences" android:showAsAction="always" /> </menu> 

И в классе активности поиска я настраиваю ActionBar следующим образом:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.search, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); searchView.setSubmitButtonEnabled(false); return true; } 

Проблема в том, что если я выполняю searchView.setIconifiedByDefault(false); Я вижу эту картину:
Введите описание изображения здесь

Вы можете заметить, что нет второго пункта меню. Здесь, если я устанавливаю android: showAsAction = "always | collapseActionView", он по умолчанию рушится, но теперь я вижу второй элемент:
Введите описание изображения здесь
На картинке выше я уже нажал значок поиска

Есть две проблемы, которые я не могу понять:

  1. Как показать всегда два элемента: расширенный поиск и значок для действий по настройке?
  2. Как избавиться от этого уродливого второго значка поиска?

Вот мое решение для скрытия внутреннего значка поиска.

В вашем файле styles.xml, где вы управляете своей темой, добавьте следующее в свой раздел application_theme (обычно ниже base_theme)

 <!--Application Theme--> <style name="application_theme" parent="application_base_theme"> <item name="searchViewSearchIcon">@android:color/transparent</item> <item name="searchViewCloseIcon">@android:color/transparent</item> </style> 

Это заставляет все вхождения значка поиска в виджет поиска панели действий быть прозрачным и невидимым.

Тем не менее, они по-прежнему занимают место в текстовом поле, создавая невидимый запас с левой стороны, где раньше был значок. Если вы хотите исправить это, вместо этого вы должны расширить com.actionbarsherlock.widget.SearchView со своим собственным классом и добавить следующее:

 ImageView searchHintIcon = (ImageView) findViewById(R.id.abs__search_mag_icon); searchHintIcon.setVisibility(View.GONE); 

Я хотел бы добавить это в конструктор, но также переопределить setIconified и setIconifiedByDefault и включить его там. Это заставит его скрыть значок при каждом расширении вида действия.

Чтобы показать другие значки в панели действий, попробуйте установить:

 android:showAsAction="collapseActionView|ifRoom" 

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

НТН

Мне удалось это исправить, используя

 mySearchView.setIconfied(false); 

А не setIconifiedByDefault ()

PS Я использовал android.support.v7.widget.SearchView

Мой способ разрешить показ двух элементов – установить определенную ширину для SearchView.

 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT); searchView.setLayoutParams(lp); 

Код, который я использую:

Рез / меню / main.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/search" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:showAsAction="always" android:title="@string/action_search"/> <item android:id="@+id/settings" android:showAsAction="ifRoom" android:onClick="startSettingsActivity" android:title="@string/action_settings"/> </menu> 

И в моей деятельности

 @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.main, menu); MenuItem searchViewItem = menu.findItem(R.id.search); SearchView searchView = (SearchView) searchViewItem.getActionView(); FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT); searchView.setLayoutParams(lp); searchView.setIconifiedByDefault(false); searchView.setSubmitButtonEnabled(false); return true; } public void startQuickSearchActivity(MenuItem menuItem){ startActivity(new Intent(this, QuickSearchActivity_.class)); }