¿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.
- Cambio del fondo dibujable del widget de búsqueda
- Pasar la consulta de búsqueda ActionBar para fragmentar
- Barra de Acción de Android SearchView Menu Icon Size
- Puntero nulo en ExpandedView para la búsqueda de ActionBar
- El widget de búsqueda no está funcionando en el release apk
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:
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?
- Mostrar icono de micrófono en SearchView siempre
- SearchView como la aplicación Google Play Video
- Estilizar la vista de búsqueda de android y la lista desplegable en la barra de acciones
- Botón del micrófono ActionBar (búsqueda por voz) en SearchView
- NullPointerException en SearchView con AppCompat en Android 5.0
- vista de búsqueda no expandir todo el ancho
- SearchView con múltiples fragmentos usando viewpager en android
- Espacio izquierdo en la barra de herramientas con SearchView android studio
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>
- Typed Array debe ser reciclado después de su uso con #recycle ()
- Encuadernación onScrolling escucha al android ListView