¿Cómo personalizar el botón "arriba" cuando se está expandiendo el searchView?

Fondo

Mi aplicación tiene la capacidad de buscar elementos (que son otras aplicaciones) mediante el SearchView en ActionBar.

La aplicación utiliza la biblioteca de soporte de Google y funciona bien en todas las versiones de Android de la API 9.

El problema

En Lollipop, cuando hago clic en el elemento de acción de búsqueda para iniciar la búsqueda, observo que el botón de subir / retroceder en la esquina superior izquierda llega a ser blanco, lo cual es malo para este caso, ya que el fondo de la barra de acciones también es bastante blanco:

Introduzca aquí la descripción de la imagen

Lo curioso es que no siempre ocurre, y no creo que ocurra en las versiones de Android que no son Lollipop (probado en múltiples emuladores y dispositivos).

Otra cosa extraña es que el ícono del cajón de navegación parece bien, así como el icono X dentro de la ventana de búsqueda.

Aquí está el XML de la barra de herramientas que tengo:

<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" /> 

El "colorPrimary" está configurado para ser: #ffEFEFEF.

Además, el tema principal de la actividad es "Theme.AppCompat.Light.NoActionBar", ya que he configurado la barra de herramientas como la barra de acción.

La pregunta

¿Cómo puedo solucionar este problema?

¿Cuál es la causa de este problema? ¿Por qué funciona bien en otras versiones de Android?

Parece un problema conocido: https://code.google.com/p/android/issues/detail?id=78346 .

La solución está aquí: https://code.google.com/p/android/issues/detail?id=78346#c5 , es decir:

Values-21 / themes.xml:

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

Eso es. Espero que se arreglen más tarde.

Para personalizarlo, asumo que puedo usarlo, y también elijo el color usando "colorControlNormal"

Supongo que el atributo "app: collapseIcon" es lo que estabas buscando?

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

¿Cómo puedo solucionar este problema?

He creado una clase de utilidad para este (y otros) problemas. Consiguelo aqui:

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

Parte 1: Llame al siguiente método en su Activity.onCreate(Bundle) :

 ToolbarUtils.fixToolbar(mToolbar); 

Parte 2: El código usa el valor android:colorControlNormal del "tema" de la barra de herramientas que especificó en el diseño. Si utiliza la biblioteca de soporte y sólo define colorControlNormal necesita agregar la siguiente línea después de ella:

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

¿Cuál es la causa de este problema?

Después de un montón de reflexiones y experimentos parece que la flecha utiliza el mapa de bits original, que es blanco, sin ningún color, que está mal.

Nota: El icono del desbordamiento del menú también lee el android:colorControlNormal así que ahora exhibirá color correcto también.

EDIT: Requisitos previos:

Su Toolbar debe tener atributos similares a los siguientes

 <!-- 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> 

Entonces el tema de la barra de herramientas debe verse algo como esto

 <!-- 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> 
  • Cómo colapsar completamente un SearchView después de un elemento seleccionado?
  • Android SearchView Ocultar el teclado al iniciar
  • Cómo manejar el botón Atrás de la vista de búsqueda en android
  • Filtro de búsquedaVer ListView
  • Cómo eliminar subrayado blanco en un widget de SearchView en la barra de herramientas Android
  • Vista de búsqueda en LinearLayout usando android.support.v7.widget.SearchView
  • OnActionExpandListener en menuitem no funciona. ¿Como arreglarlo?
  • SearchView es invisible con el parámetro collapseActionView desde la biblioteca de diseño 24.1
  • Cómo agregar un SearchWidget a la ActionBar?
  • SearchView en ListView con un adaptador personalizado
  • Configuaration Searchable que devuelve Null para el SearchView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.