¿Es posible cambiar el textcolor en un Android SearchView?

El elemento SearchView no tiene ninguna propiedad para cambiar el color del texto. El color de texto predeterminado es negro y no funciona en nuestro fondo oscuro. ¿Hay alguna manera de cambiar el color del texto sin recurrir a los hacks?

Encontré esta pregunta similar relacionada con cambiar el tamaño del texto, pero hasta ahora, no tiene ninguna respuesta: ¿cómo establecer SearchView TextSize?

Intente algo como esto: obtendría un control de la vista de texto del SDK y luego cámbielo ya que no lo exponen públicamente.

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView textView = (TextView) searchView.findViewById(id); textView.setTextColor(Color.WHITE); 

Añadir

 @android:color/white 

al tema principal y eso debería cambiar el texto ingresado. También puedes usar

 @android:color/white 

para cambiar el texto de sugerencia para SearchView. (Tenga en cuenta que puede reemplazar @android:color/white con el valor apropiado que espera usar)

Esto funciona para mí

 SearchView searchView = (SearchView) findViewById(R.id.search); EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchEditText.setTextColor(getResources().getColor(R.color.white)); searchEditText.setHintTextColor(getResources().getColor(R.color.white)); 

Yo quería hacer algo similar. Finalmente tuve que encontrar el TextView entre los niños de TextView :

 for (TextView textView : findChildrenByClass(searchView, TextView.class)) { textView.setTextColor(Color.WHITE); } 

Si quieres el método util:

 public static  Collection findChildrenByClass(ViewGroup viewGroup, Class clazz) { return gatherChildrenByClass(viewGroup, clazz, new ArrayList()); } private static  Collection gatherChildrenByClass(ViewGroup viewGroup, Class clazz, Collection childrenFound) { for (int i = 0; i < viewGroup.getChildCount(); i++) { final View child = viewGroup.getChildAt(i); if (clazz.isAssignableFrom(child.getClass())) { childrenFound.add((V)child); } if (child instanceof ViewGroup) { gatherChildrenByClass((ViewGroup) child, clazz, childrenFound); } } return childrenFound; } 

Esto se logra mejor a través de estilos personalizados. Sobrecargue el estilo del widget de la barra de acciones con su propio estilo personalizado. Para holo light con barra de acción oscura, res/values/styles_mytheme.xml en su propio archivo de estilos como res/values/styles_mytheme.xml :

   

Asegúrese de que su aplicación esté utilizando el tema personalizado del tema como se describe en la descripción del enlace aquí

Para mí, lo siguiente funciona. Utilicé un código de un enlace: cambiar el color del texto de la sugerencia de búsqueda en la barra de acciones mediante la biblioteca de soporte .

  searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); EditText txtSearch = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)); txtSearch.setHint(getResources().getString(R.string.search_hint)); txtSearch.setHintTextColor(Color.LTGRAY); txtSearch.setTextColor(Color.WHITE); 

Cambio de barra de acciones vista de búsqueda sugerencia consejos de color de texto otra solución. Funciona, pero establece solo texto y color de sugerencia.

  searchView.setQueryHint(Html.fromHtml("" + getResources().getString(R.string.search_hint) + "")); 

Si está utilizando android.support.v7.widget.SearchView, es posible sin tener que usar el reflection.

Así es como lo estoy haciendo en mi aplicación:

 EditText text = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); ImageView searchCloseIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate); if (searchPlate != null) { searchPlate.setBackgroundResource(R.drawable.search_background); } if (text != null){ text.setTextColor(resources.getColor(R.color.white)); text.setHintTextColor(getResources().getColor(R.color.white)); SpannableStringBuilder magHint = new SpannableStringBuilder(" "); magHint.append(resources.getString(R.string.search)); Drawable searchIcon = getResources().getDrawable(R.drawable.ic_action_view_search); int textSize = (int) (text.getTextSize() * 1.5); searchIcon.setBounds(0, 0, textSize, textSize); magHint.setSpan(new ImageSpan(searchIcon), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Set the new hint text text.setHint(magHint); } if (searchCloseIcon != null){ searchCloseIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_close)); } 

No exponen los ID de forma pública para el SearchView que no es compatible con la aplicación, pero lo hacen para AppCompat si sabe dónde buscar. 🙂

Puede hacerlo configurando el atributo editTextColor en el estilo.

  

y aplica este estilo a la Toolbar de Toolbar o a la vista de SearchView en el diseño.

    

si usa – android.support.v7.widget.SearchView

 SearchView searchView = (SearchView) item.getActionView(); EditText editText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); editText.setTextColor(Color.WHITE); 

Tuve este problema, y ​​esto funciona para mí.

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.customer_menu, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_customer_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setOnQueryTextListener(this); //Applies white color on searchview text int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView textView = (TextView) searchView.findViewById(id); textView.setTextColor(Color.WHITE); return true; } 

Si basa el tema de su aplicación en el tema holo recibirá un texto blanco en lugar de negro en su SearchView

No encontré ninguna otra manera de cambiar el texto de la vista de búsqueda sin usar hacks sucios.

Usa este, está bien. :RE

 AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text); searchText.setHintTextColor(getResources().getColor(color.black)); searchText.setTextColor(getResources().getColor(color.black)); 

Esto es trabajo para mí.

 final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.setOnQueryTextListener(this); searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchEditText.setTextColor(getResources().getColor(R.color.white)); searchEditText.setHintTextColor(getResources().getColor(R.color.white)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { searchEditText.setBackgroundColor(getResources().getColor(R.color.c_trasnparent)); searchEditText.setGravity(Gravity.CENTER); searchEditText.setCompoundDrawables(null,null,R.drawable.ic_cross,null); } 

Sí, es posible utilizando el siguiente método.

 public static EditText setHintEditText(EditText argEditText, String argHintMessage, boolean argIsRequire) { try { if (argIsRequire) { argHintMessage = " " + argHintMessage; //String text = ""+argHintMessage+" *"; String text = "" + argHintMessage + ""; argEditText.setHint(Html.fromHtml(text)); } else { argEditText.setHint(argHintMessage); } } catch (Exception e) { e.printStackTrace(); } return argEditText; } 

Llamar a este método se ve así ..

 metLoginUserName=(EditText)this.findViewById(R.id.etLoginUserName); metLoginPassword=(EditText)this.findViewById(R.id.etLoginPassword); /**Set the hint in username and password edittext*/ metLoginUserName=HotSpotStaticMethod.setHintEditText(metLoginUserName, getString(R.string.hint_username),true); metLoginPassword=HotSpotStaticMethod.setHintEditText(metLoginPassword, getString(R.string.hint_password),true); 

usándolo he agregado exitosamente la marca de color rojo * en la pista usando este método. Debe cambiar este método de acuerdo con su requerimiento. Espero que te sea útil … 🙂

Si podemos,

 SearchView searchView = (SearchView) findViewById(R.id.sv_symbol); 

Para aplicar el color blanco para el texto de SerachView,

 int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView textView = (TextView) searchView.findViewById(id); textView.setTextColor(Color.WHITE); 

Feliz encoding !!!!

Crea un estilo para tu Toolbar

  

Y establecerlo como el tema de la Toolbar

  

Cambiar el color del texto escrito:

 ((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setTextColor(Color.WHITE); 

Cambiar el color del texto de sugerencia:

 ((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setHintTextColor(Color.LTGRAY); 

Un objeto LinearLayout extiende desde LinearLayout , por lo que contiene otras vistas. El truco consiste en encontrar la vista que contiene el texto de sugerencia y cambiar el color de forma programática. El problema al tratar de encontrar la vista por identificación es que la identificación depende del tema utilizado en la aplicación. Por lo tanto, dependiendo del tema utilizado, el findViewById(int id) puede devolver null . Un mejor enfoque que funciona con cada tema es recorrer la jerarquía de vista y encontrar el widget que contiene el texto de sugerencia:

 // get your SearchView with its id SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); // traverse the view to the widget containing the hint text LinearLayout ll = (LinearLayout)searchView.getChildAt(0); LinearLayout ll2 = (LinearLayout)ll.getChildAt(2); LinearLayout ll3 = (LinearLayout)ll2.getChildAt(1); SearchView.SearchAutoComplete autoComplete = (SearchView.SearchAutoComplete)ll3.getChildAt(0); // set the hint text color autoComplete.setHintTextColor(getResources().getColor(Color.WHITE)); // set the text color autoComplete.setTextColor(Color.BLUE); 

Con este método, también puede cambiar el aspecto de otros widgets en la jerarquía de EditText , como EditText contiene la consulta de búsqueda. A menos que Google decida cambiar la jerarquía de vistas de un SearchView breve, debería poder cambiar la apariencia del widget con este método durante un tiempo.

Es posible personalizar la vista de búsqueda utilizando la biblioteca appcompat v7. Utilicé la biblioteca de appcompat v7 y definí el estilo personalizado para ella. En la carpeta dibujable, coloque el archivo bottom_border.xml que se ve así:

  < ?xml version="1.0" encoding="utf-8"?>                   

En la carpeta de valores styles_myactionbartheme.xml:

  < ?xml version="1.0" encoding="utf-8"?>        

Definí el archivo custommenu.xml para mostrar el menú:

     

Su actividad debe extender ActionBarActivity en lugar de Activity. Aquí está el método onCreateOptionsMenu.

  @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.custommenu, menu); } 

En archivo manifiesto:

   

Para obtener más información, consulte esta url:
Aquí http://www.jayway.com/2014/06/02/android-theming-the-actionbar/

para la barra de herramientas de appcompat-v7 con searchView (proporcionado a través de MenuItemCompat):

Establecer el tema de la barra de herramientas en @ style / ThemeOverlay.AppCompat.Light generará un color oscuro (negro) para el texto de sugerencia y para el texto introducido, pero no afectará el color del cursor *. En consecuencia, establecer el tema de la barra de herramientas en @ style / ThemeOverlay.AppCompat.Dark producirá color claro (blanco) para el texto de sugerencia y el texto introducido, el cursor * será blanco de todos modos.

Personalizar los temas anteriores:

android: textColorPrimary -> color del texto ingresado

editTextColor -> color del texto ingresado (anulará el efecto de android: textColorPrimary si está configurado)

android: textColorHint -> color de la pista

* Nota: Todavía tengo que determinar cómo se puede controlar el color del Cursor (sin usar la solución de reflexión).

Al usar esto, pude cambiar el texto de color escrito en la vista de búsqueda

 AutoCompleteTextView typed_text = (AutoCompleteTextView) inputSearch.findViewById(inputSearch.getContext().getResources().getIdentifier("android:id/search_src_text", null, null)); typed_text.setTextColor(Color.WHITE); 

Guau. Una gran cantidad de respuestas. Obtiene el valor de color de su color primario.

Cambiarlo, y está hecho!

 @Override public void onResume() { super.onResume(); getActivity().setTheme(R.style.YourTheme_Searching); } 

Estilos;

  

La forma más limpia es:

La barra de herramientas usa el tema ThemeOverlay.AppCompat.Dark.Actionbar.

Ahora hazlo como es:

toolbarStyle parent “ThemeOverlay.AppCompat.Dark.Actionbar”

agregue este artículo en ese estilo

nombre del elemento “android: editTextColor”> yourcolor

Hecho.

Una cosa más importante es que, en la barra de herramientas, coloque el layout_height = “? Attr / actionbarSize”. Por defecto es wrap_content. Para mí, el texto ni siquiera estaba visible en la vista de búsqueda. Solucionó ese problema.

 searchView = (SearchView) view.findViewById(R.id.searchView); SearchView.SearchAutoComplete searchText = (SearchView.SearchAutoComplete) searchView .findViewById(org.holoeverywhere.R.id.search_src_text); searchText.setTextColor(Color.BLACK); 

Estoy usando Holoeverywhere Library. Tenga en cuenta el org.holoeverywhere.R.id.search_src_text

 TextView textView = (TextView) searchView.findViewById(R.id.search_src_text); textView.setTextColor(Color.BLACK); 

Encontré una solución de una publicación de blog. Mira aquí .

Básicamente, el estilo es searchViewAutoCompleteTextView y tiene android: actionBarWidgetTheme hereda el estilo.

funciona conmigo

 @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem searchItem = menu.findItem(R.id.action_search); EditText searchEditText = (EditText) searchView.getActionView().findViewById(android.support.v7.appcompat.R.id.search_src_text); searchEditText.setTextColor(getResources().getColor(R.color.white)); searchEditText.setHintTextColor(getResources().getColor(R.color.white)); return super.onPrepareOptionsMenu(menu); } 

Lo que funcionó para mí

 ((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text)); 

Intenté y encontré una solución para esto. Creo que te ayudará …

 searchView.setBackgroundColor(Color.WHITE); 

enter image description here

Puede implementar esta clase para cambiar el color y la imagen de la fuente ::

 import com.actionbarsherlock.widget.SearchView; import com.actionbarsherlock.widget.SearchView.SearchAutoComplete; public class MySearchView { public static SearchView getSearchView(Context context, String strHint) { SearchView searchView = new SearchView(context); searchView.setQueryHint(strHint); searchView.setFocusable(true); searchView.setFocusableInTouchMode(true); searchView.requestFocus(); searchView.requestFocusFromTouch(); ImageView searchBtn = (ImageView) searchView.findViewById(R.id.abs__search_button); searchBtn.setImageResource(R.drawable.ic_menu_search); ImageView searchBtnClose = (ImageView) searchView.findViewById(R.id.abs__search_close_btn); searchBtnClose.setImageResource(R.drawable.ic_cancel_search_bar); SearchAutoComplete searchText = (SearchAutoComplete) searchView.findViewById(R.id.abs__search_src_text); searchText.setTextColor(context.getResources().getColor(color.white)); return searchView; } public static SearchView getSearchView(Context context, int strHintRes) { return getSearchView(context, context.getString(strHintRes)); } } 

Espero que pueda ayudarlos chicos. :RE