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

Задний план

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

Приложение использует библиотеку поддержки 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" , так как я установил панель инструментов в качестве панели действий.

Вопрос

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

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


person android developer    schedule 07.12.2014    source источник
comment
Пробовали ли вы добавить android:theme="@android:style/ThemeOverlay.Material.Light.ActionBar" к Toolbar?   -  person ianhanniballake    schedule 08.12.2014
comment
@ianhanniballake Его не существует, поэтому я попробовал это: android:theme=@style/Widget.AppCompat.Light.ActionBar , но он также ничего не делает...   -  person android developer    schedule 08.12.2014


Ответы (3)


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

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

values-21/themes.xml:

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

Вот и все. Надеюсь, это исправят позже.

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

person android developer    schedule 08.12.2014
comment
Это намного проще :D Спасибо. - person Eugen Pechanec; 08.12.2014
comment
@EugenPechanec Да, извините, что короче, чем у вас ... :) - person android developer; 08.12.2014

Я предполагаю, что атрибут "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" />
person Julian Horst    schedule 18.02.2016
comment
Как мне использовать обычный, только с правильным цветом? - person android developer; 19.02.2016
comment
Я не думаю, что для этого есть возможность получить доступ к стандартной системе вверх/назад. Я бы предложил просто установить navigationIcon и CollarIcon вручную с помощью пользовательских рисунков, которые вы также можете подкрасить самостоятельно и т. д. - person Julian Horst; 19.02.2016

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

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

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>
person Eugen Pechanec    schedule 08.12.2014
comment
Но я не использовал colorControlNormal. Я использовал ту, которую предоставляет библиотека поддержки... - person android developer; 08.12.2014
comment
@androiddeveloper Проверьте и примените код, который я добавил. Это то, что я использую, и это работает. Как только вы вставите свои цвета, все должно работать нормально. - person Eugen Pechanec; 08.12.2014
comment
Я нашел более простое решение и опубликовал ответ. - person android developer; 08.12.2014