Как настроить кнопку «вверх» при расширении searchView?

Задний план

Мое приложение имеет возможность искать элементы (которые являются другими приложениями) с помощью SearchView на ActionBar.

Приложение использует библиотеку поддержки Google, и она хорошо работает во всех версиях Android от API 9.

Проблема

На Lollipop, когда я нажимаю элемент действия поиска, чтобы начать поиск, я заметил, что кнопка вверх / назад в верхнем левом углу становится белой, что плохо для этого случая, так как фон панели действий также довольно белый:

Введите описание изображения здесь

Странно, что это не всегда происходит, и я не думаю, что это происходит на версиях Android, которые не Lollipop (протестированы на нескольких эмуляторах и устройствах).

Еще одна странность в том, что значок ящика навигации выглядит нормально, а также значок X внутри searchView.

Вот XML панели инструментов, который у меня есть:

<android.support.v7.widget.Toolbar android:id="@+id/activity_app_list__toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" /> 

«ColorPrimary» установлен как: #ffEFEFEF.

Кроме того, родителем этой темы является «Theme.AppCompat.Light.NoActionBar», поскольку я установил панель инструментов как actionBar.

Вопрос

Как я могу исправить эту проблему?

В чем причина этой проблемы? Почему все работает отлично на других версиях Android?

Solutions Collecting From Web of "Как настроить кнопку «вверх» при расширении searchView?"

Это похоже на известную проблему: https://code.google.com/p/android/issues/detail?id=78346 .

Обходной путь здесь: https://code.google.com/p/android/issues/detail?id=78346#c5 , что означает:

Значения-21 / themes.xml:

 <style name="MyTheme" parent="Theme.AppCompat"> <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item> </style> 

Вот и все. Надеюсь, что это будет исправлено позже.

Чтобы настроить его, я предполагаю, что могу его использовать, а также выбрать цвет с помощью функции colorControlNormal,

Я предполагаю, что атрибут app: collapseIcon – это то, что вы искали?

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="@dimen/toolbarHeight" app:collapseIcon="@drawable/collapseBackIcon" /> 

Как я могу исправить эту проблему?

Я создал класс утилиты для этой (и других) проблем. Получи это здесь:

https://gist.github.com/consp1racy/96958a1dedf5a99d4ca5

Часть 1: вызовите следующий метод в вашем Activity.onCreate(Bundle) :

 ToolbarUtils.fixToolbar(mToolbar); 

Часть 2: В коде используется значение android:colorControlNormal из панели инструментов «тема», которую вы указали в макете. Если вы используете библиотеку поддержки и определен только colorControlNormal вам нужно добавить следующую строку:

 <item name="android:colorControlNormal" tools:ignore="NewApi">?attr/colorControlNormal</item> 

В чем причина этой проблемы?

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

Примечание . Значок переполнения меню также читает android:colorControlNormal поэтому теперь он отображает правильный цвет.

EDIT: Предпосылки:

Ваша Toolbar должна иметь атрибуты, похожие на следующие

 <!-- custom toolbar theme --> <item name="theme">@style/ThemeOverlay.MyApp.ActionBar</item> <!-- light popup menu theme, change this if you need to --> <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item> <!-- app bar background color --> <item name="android:background">@color/material_deep_orange_500</item> 

Тогда тема панели инструментов должна выглядеть примерно так:

 <!-- example uses dark app bar template, feel free to change it to light if you need to --> <style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <!-- this line defines title text color --> <item name="android:textColorPrimary">@color/material_white_100</item> <!-- this line defines subtitle text color --> <item name="android:textColorSecondary">@color/material_white_70</item> <!-- this line defines up/hamburger/overflow icons color --> <item name="colorControlNormal">@color/material_black_54</item> <!-- this line is necessary for proper coloring on lollipop - do not delete it --> <item name="android:colorControlNormal" tools:ignore="NewApi">?attr/colorControlNormal</item> </style>