Как изменить значок SearchView по умолчанию? - программирование
Подтвердить что ты не робот

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

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

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

ActionBar with two actions

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

UPDATE. Я думал, что мое приложение использует мой значок, но это не так, он использует значок поиска по умолчанию, поэтому на самом деле мой вопрос: как изменить значок по умолчанию для поиск? Это предложение в файле menu.xml не работает:

android:icon="@drawable/selectable_header_search"
4b9b3361

Ответ 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, потому что связанное с ним поле было настроено как закрытое.