Показать 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)); } 
Intereting Posts
SOAP xml взамен – Android Android: запуск режима «один экземпляр» Com.google.firebase.database.DatabaseException: вызовы setPersistenceEnabled () должны быть выполнены перед любым другим использованием экземпляра FirebaseDatabase Как запустить музыкальный плеер cordova в фоновом режиме с вариантами, доступными на панели уведомлений Android: как запустить Activity из диалогового окна предупреждения Установка размера диалогового окна Ресурс существует с другим случаем Проблема поиска веб-браузера Android 2.2 Контекстная панель действий с помощью DialogFragment Android FileNotFoundException res / drawable-hdpi / scrollbar_handle_vertical.9.png Как вы остановите ADT Logcat View из автоматического появления в Eclipse? Невозможно преобразовать объект типа java.util.ArrayList, чтобы ввести модель Убейте все действия, когда нажата клавиша HOME нажата андроид Множественные действия / фрагменты и шаблон представления представлений модели Unzipping zip-файл дает «java.util.zip.ZipException: не может читать версию» или «java.util.ZipException Не удается прочитать локальный заголовок версии 45»