Как настроить кнопку "вверх" при расширении 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>