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

Фон

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

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

Проблема

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

enter image description here

Странно, что это не всегда происходит, и я не думаю, что это происходит на версиях 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?

Ответ 1

Похоже, известная проблема: 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

Ответ 2

Я бы предположил, что атрибут 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" />

Ответ 3

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

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

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, поэтому теперь он также отображает правильный цвет.

РЕДАКТИРОВАТЬ: Предпосылки:

Ваш 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>