Как изменить значок SearchView по умолчанию?

Я использовал « Генератор стилей для Android Action », чтобы генерировать мою собственную тему Holo. Затем я добавил два значка в панель действий, один для searchFilter и один для выбора файлов, оба значка белые . Значок выбора файла (справа) выглядит хорошо, но как-то значок поиска выглядит темно-серым. При вводе текста в текстовом режиме, кнопка закрытия также выглядит темно-серой.

Я попытался изменить цвет панели действий, а также из поиска, без успеха. Почему в этом представлении отображается этот цвет? Как я могу его изменить?

ActionBar с двумя действиями

Большое спасибо.

ОБНОВЛЕНИЕ : я думал, что мое приложение использует мой значок, но это не так, он использует значок поиска по умолчанию, поэтому на самом деле мой вопрос: как изменить значок по умолчанию для вида поиска? Это предложение в файле menu.xml не работает:

android:icon="@drawable/selectable_header_search" 

Solutions Collecting From Web of "Как изменить значок SearchView по умолчанию?"

К сожалению, нет простого способа изменить значок SearchView на пользовательский вариант, поскольку атрибут searchViewSearchIcon не является общедоступным. См. Этот ответ для деталей.

Однако, я думаю, что ваша проблема вызвана наследованием от неправильной темы. Пожалуйста, используйте android:Theme.Holo.Light.DarkActionBar как основу для вашей темы. Значки по умолчанию на панели действий должны иметь светлый цвет.

 <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> ... </style> 

Поскольку атрибут searchViewSearchIcon не является общедоступным, вы можете изменить значок, используя следующий код:

 int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null); ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId); searchIcon.setImageResource(R.drawable........); 

Попробуйте настроить в showAsAction эту опцию: * MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW *

Без этой опции SearchView не отображает значок, который вы установили для кнопки действий.

 menu.add("Search") .setIcon( getResources().getDrawable( R.drawable.selectable_header_search)) .setActionView(searchView) .setShowAsAction( MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

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

В ваш стиль темы включайте это:

 <style name="YourTheme.Toolbar"> <item name="searchViewStyle">@style/YourActionBarSearch</item> <item name="editTextColor">@color/your_ab_text_color</item> <item name="android:textColorHint">@color/your_ab_hint_color</item> </style> 

Теперь вы можете определить стиль SearchView с помощью searchViewStyle , а editTextColor установит цвет текста в поле поиска. Установив android:textColorHint вы также установите цвет подсказки, например «Поиск …».

 <style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView"> <item name="searchIcon">@drawable/ic_ab_search</item> <item name="queryBackground">@null</item> <item name="submitBackground">@null</item> <item name="searchHintIcon">@drawable/ic_ab_small_search</item> <item name="defaultQueryHint">@string/toolbar_search_hint</item> <item name="closeIcon">@drawable/ic_ab_small_search_close</item> </style> 

Это будет выглядеть так, как вам нравится, более или менее. Поле searchIcon – это значок в панели действий. Поле searchHintIcon – это маленький значок слева от подсказки в поле поиска. Поле closeIcon является значком закрытия в правой части поля поиска.

Проверьте это, для большего количества настроек стиля:

 $ANDROID_SDK/platforms/android-24/data/res/values/styles_holo.xml 

Для таких, как я, надеясь найти способ по-настоящему изменить значок, вы можете использовать это с помощью sherlock для панели действий:

  // Getting the 'search_icon' ImageView searchIcon = (ImageView)searchView.findViewById(R.id.abs__search_button); // Setting background of 'search_plate' to earlier defined drawable. searchIcon.setImageResource(R.drawable.search_button_selector); 

Вы не можете изменить значение по умолчанию с помощью обычного образа android:icon потому что связанное с ним поле было закрыто.