Как установить цвет значка на панели инструментов Android?

Я разработал проект GitHub от https://github.com/nglauber/playground/tree/master/android/DemoSearch

Я хочу, чтобы цвет значка поиска был чисто белым. На данный момент значок поиска имеет серый цвет и, очевидно, отличается от белого текста "Demo Search".

Значок поиска панели инструментов в сером цвете

Edit:

Основываясь на некоторых предложениях, я создал новый значок, используя чистый белый (точнее, RGB = 255,255,255), и использую его вместо android: ic_menu_search. Android будет оттенять его серым тоном (проверено с помощью инструмента выбора цвета на снимке экрана), хотя исходный значок находится в чисто белом цвете.

Это говорит мне о том, что Android целенаправленно подкрашивает значок. И я надеюсь, что есть способ, которым я могу иметь элемент управления для установки или изменения цвета значка в панели инструментов Android.

Значок поиска панели инструментов в сером цвете

Ответ 1

Я нашел ответ на свой вопрос. Я решил документировать его, чтобы он мог помочь другим разработчикам Android.

Короткий ответ: да, мы можем сохранить цвет значка на панели инструментов Android, и нам нужно сделать это, импортировав ресурс через

  • SVG или
  • PNG с типом иконки как иконки запуска

SVG PNG with icon type as Launcher Icons


Первоначальная проблема, с которой я столкнулся, была связана с

  • PNG с типом значков в виде панели действий и значков вкладок

В этом случае Android Studio Image Asset по неизвестной причине немного изменит цвет значка при сохранении в папку проекта res. И Android будет дополнительно менять цвет значка, когда он, наконец, отображается на экране. Конечным результатом было то, что я описал в вопросе, где первоначально чисто белый значок превратится и станет серым.

Если мы используем SVG или PNG с типом иконки в качестве иконки запуска, цвет значка не будет меняться. Значок сможет сохранить свой первоначальный цвет. Это заставляет меня поверить, что это ошибка в Android Studio, а не помощь в разработке рекомендаций.

PNG with icon type as Action Bar and Tab Icons


Аналогичное наблюдение сообщается в этом посте. @markj сообщил, что "получающиеся изображения - просто бесполезные серые формы".


Полученные скриншоты среды Android

Цвет поддерживается

SVG (SVG) PNG with icon type as Launcher Icons (PNG как значки запуска)

Цвет изменился

PNG with icon type as Action Bar and Tab Icons (PNG как значки панели действий и вкладок)

Ответ 2

Вам нужно сделать белый значок и добавить его в menu_search.xml в файл res/menu`.

В настоящее время его android:icon="@android:drawable/ic_menu_search". Но вы можете использовать свой собственный значок здесь. Затем вы можете записать его как android:icon="@drawable/ic_menu_search" в файле res/menu.

Ответ 3

Вам нужно использовать меню. Добавить searchView как элемент в меню

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/menu_search"
    android:title="Search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="ifRoom"
    android:orderInCategory="1"
    android:menuCategory="secondary"
    android:visible="true"

    />

</menu>

И в вашей деятельности Переопределите этот метод

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    menuItem = menu.findItem(R.id.menu_search);
    searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
    searchView.setIconifiedByDefault(true);

    //get search icon View and set your drawable
    ImageView icon = (ImageView)searchView.findViewById(R.id.search_button);
    icon.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_search_white_24dp));




    return true;
}

Ответ 4

Вам просто нужно перейти на использование класса SearchView из библиотеки поддержки

<item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search_white_24dp"
        android:orderInCategory="2"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />