Как изменить значок SearchView по умолчанию?
Я использовал "" Генератор стилей Android Action", чтобы создать свою собственную тему Голо.
Затем я добавил два значка в панель действий, один для searchFilter и один для выбора файлов, оба значка белые. Значок выбора файла (справа) выглядит хорошо, но как-то значок поиска выглядит темно-серым. При вводе текста в виде поиска кнопка закрытия также выглядит темно-серой.
Я попробовал изменить цвет панели действий, а также из поиска, без успеха. Почему в представлении поиска отображается этот цвет? Как я могу его изменить?
![ActionBar with two actions]()
Большое спасибо.
UPDATE. Я думал, что мое приложение использует мой значок, но это не так, он использует значок поиска по умолчанию, поэтому на самом деле мой вопрос: как изменить значок по умолчанию для поиск?
Это предложение в файле menu.xml не работает:
android:icon="@drawable/selectable_header_search"
Ответы
Ответ 1
К сожалению, нет простого способа изменить значок SearchView
на пользовательский drawable, так как атрибут theme searchViewSearchIcon
не является общедоступным. Подробнее см. этот.
Однако, я думаю, что ваша проблема вызвана унаследованием от неправильной темы. Используйте android:Theme.Holo.Light.DarkActionBar
в качестве основы для своей темы. Значки по умолчанию на панели действий должны иметь светлый цвет.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
...
</style>
Ответ 2
Поскольку атрибут searchViewSearchIcon не является общедоступным, вы можете изменить значок, используя следующий код:
int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null);
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId);
searchIcon.setImageResource(R.drawable........);
Ответ 3
Попробуйте настроить в 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);
Ответ 4
Самый простой способ, по которому я нашел изменение значка поиска по умолчанию на панели действий, находится в вашем onPrepareOptionsMenu. Вы можете увидеть мой ответ здесь к аналогичному вопросу!
Ответ 5
В вашем стиле темы укажите это:
<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
Ответ 6
Несколько строк кода и работает с любой версией Android. (Также с использованием Material Design и BottomAppBar): fooobar.com/questions/114532/...
Ответ 7
Для таких, как я, надеясь найти способ по-настоящему изменить значок, вы можете использовать это с помощью 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
, потому что связанное с ним поле было настроено как закрытое.