studio - menu toolbar android
¿Cómo cambiar el icono predeterminado de SearchView? (6)
He usado " Android Action Bar Style Generator " para generar mi propio tema Holo. Luego agregué dos iconos a la barra de acción, uno para un filtro de búsqueda y otro para un selector de archivos, ambos iconos son blancos . El icono del selector de archivos (a la derecha) se ve bien, pero de alguna manera el icono de búsqueda se ve gris oscuro. Al escribir en la vista de búsqueda de texto, el botón Cerrar también se ve gris oscuro.
He intentado cambiar el color de la barra de acción y también desde la vista de búsqueda, sin éxito. ¿Por qué la vista de búsqueda muestra este color? ¿Cómo puedo cambiarlo?
Muchas gracias.
ACTUALIZACIÓN : pensé que mi aplicación estaba usando mi ícono pero no lo hace, usa el ícono de la vista de búsqueda predeterminada, entonces mi pregunta es, ¿cómo cambio el ícono predeterminado de la vista de búsqueda? Esta oración en el archivo menu.xml no está funcionando:
android:icon="@drawable/selectable_header_search"
Dado que el atributo searchViewSearchIcon no es público, puede cambiar el icono usando el siguiente código:
int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null);
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId);
searchIcon.setImageResource(R.drawable........);
Desafortunadamente, no hay una manera fácil de cambiar el icono de SearchView
a un dibujable personalizado, ya que el atributo de tema searchViewSearchIcon
no es público. Vea this respuesta para más detalles.
Sin embargo, creo que su problema se debe a la herencia del tema incorrecto. Utilice android:Theme.Holo.Light.DarkActionBar
como base para su tema. Luego, los iconos predeterminados en la barra de acción deben tener un color claro.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
...
</style>
En tu estilo de tema incluye esto:
<style name="YourTheme.Toolbar">
<item name="searchViewStyle">@style/YourActionBarSearch</item>
<item name="editTextColor">@color/your_ab_text_color</item>
<item name="android:textColorHint">@color/your_ab_hint_color</item>
</style>
Ahora puede definir el estilo de searchViewStyle
con searchViewStyle
, y editTextColor
establecerá el color del texto en el cuadro de búsqueda. Al configurar android:textColorHint
, también establecerá el color de la pista, por ejemplo, "Buscar ...".
<style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView">
<item name="searchIcon">@drawable/ic_ab_search</item>
<item name="queryBackground">@null</item>
<item name="submitBackground">@null</item>
<item name="searchHintIcon">@drawable/ic_ab_small_search</item>
<item name="defaultQueryHint">@string/toolbar_search_hint</item>
<item name="closeIcon">@drawable/ic_ab_small_search_close</item>
</style>
Esto estilizará tu vista de búsqueda a tu gusto, más o menos. El campo searchIcon
es el icono en la barra de acción. El campo searchHintIcon
es el pequeño icono a la izquierda de la pista en el campo de búsqueda. El campo closeIcon
es el icono de cierre en el lado derecho del campo de búsqueda.
Mira esto, para más configuraciones de estilo:
$ANDROID_SDK/platforms/android-24/data/res/values/styles_holo.xml
Intente configurar en el showAsAction esta opción: * MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW *
Sin esta opción, SearchView no toma el ícono que configuró para el botón de acción.
menu.add("Search")
.setIcon(
getResources().getDrawable(
R.drawable.selectable_header_search))
.setActionView(searchView)
.setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS
| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
| MenuItem.SHOW_AS_ACTION_WITH_TEXT);
La forma más fácil que he encontrado para cambiar el ícono de vista de búsqueda predeterminado en la barra de acción es en su Menú de Operaciones de Mantenimiento. Puedes ver mi respuesta here a una pregunta similar!
Para aquellos como yo que deseen encontrar una manera de cambiar realmente el ícono, pueden usar esto con el sherlock de la barra de acción:
// Getting the ''search_icon''
ImageView searchIcon = (ImageView)searchView.findViewById(R.id.abs__search_button);
// Setting background of ''search_plate'' to earlier defined drawable.
searchIcon.setImageResource(R.drawable.search_button_selector);
No puede cambiar el predeterminado con la forma común de android:icon
, porque el campo relacionado con él se ha establecido en privado.