Вопрос по customization, searchview, android, android-actionbar – Как изменить значок SearchView по умолчанию?

16

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

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

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

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

android:icon="@drawable/selectable_header_search"

Ваш Ответ

6   ответов
6

Попробуйте настроить в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);
Это решило это (пользовательский значок не работает) для меня, Android 4.1 до 5.0. Эквивалентно в меню XML:app:showAsAction="always|collapseActionView" Jonik
18

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

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

 
-2

Для тех, кто, как я, надеется найти способ по-настоящему изменить иконку, вы можете использовать это с actionbar 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потому что связанное с ним поле было установлено как частное.

Это, конечно, работает, только если вы используете actionbarsherlock Kyle Ivey
0

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


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


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

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

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

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

int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null);
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId);
searchIcon.setImageResource(R.drawable........);
ImageView searchIconView = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_button); searchIconView.setImageResource(R.drawable.ic_nav_search); будет работать на Android 4+ leegor
Супер это 'работает Bahu
это создает исключение nullPointerException desgraci
это не работает на Android 4.3, 4.4 SjoerdvGestel
0

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

Похожие вопросы