¿Es posible cambiar el textcolor en un Android SearchView?

El elemento SearchView no tiene propiedades para cambiar el color del texto. El color de texto predeterminado es negro y no funciona en nuestro fondo oscuro. ¿Hay una manera de cambiar el color del texto sin recurrir a 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?

Pruebe algo como esto: Usted obtendría un identificador a la textview de la sdk y luego lo cambiaría 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

 <item name="android:editTextColor">@android:color/white</item> 

Al tema principal y que debe cambiar el texto introducido. También puedes usar

 <item name="android:textColorHint">@android:color/white</item> 

Para cambiar el texto de la sugerencia para el SearchView. (Tenga en cuenta que puede reemplazar el @android:color/white con cualquier valor apropiado que está esperando 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 desea que el método util:

 public static <V extends View> Collection<V> findChildrenByClass(ViewGroup viewGroup, Class<V> clazz) { return gatherChildrenByClass(viewGroup, clazz, new ArrayList<V>()); } private static <V extends View> Collection<V> gatherChildrenByClass(ViewGroup viewGroup, Class<V> clazz, Collection<V> 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. Sobrecarga el estilo de widget de barra de acción con su propio estilo personalizado. Para la luz holo con la barra de acción oscura, ponga esto en su propio archivo de estilos como res/values/styles_mytheme.xml :

 <style name="Theme.MyTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarWidgetTheme">@style/Theme.MyTheme.Widget</item> <!-- your other custom styles --> </style> <style name="Theme.MyTheme.Widget" parent="@android:style/Theme.Holo"> <item name="android:textColorHint">@android:color/white</item> <!-- your other custom widget styles --> </style> 

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

Para mí los siguientes trabajos. 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); 

Cambiar barra de acción searchview dica color de texto advierte otra solución. Funciona, pero establece sólo una pista de texto y color.

  searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>")); 

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 está utilizando el android.support.v7.widget.SearchView, es posible sin tener que usar la reflexión.

Así es como lo hago 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 identificadores públicamente para el SearchView sin appcompat, pero lo hacen para AppCompat si sabe dónde buscar. 🙂

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

<style name="Theme.MyTheme" parent="android:Theme.Holo">

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

Usa este, es correcto. :RE

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

Puede hacerlo estableciendo el atributo editTextColor en el estilo.

 <style name="SearchViewStyle" parent="Some.Relevant.Parent"> <item name="android:editTextColor">@color/some_color</item> </style> 

Y se aplica este estilo a la Toolbar de Toolbar o el SearchView en el diseño.

 <android.support.v7.widget.Toolbar android:theme="@style/SearchViewStyle"> <android.support.v7.widget.SearchView /> </android.support.v7.widget.Toolbar> 

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); 

Codificación feliz !!!!

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 = "<font color=#8c8c8c>"+argHintMessage+"</font> <font color=#cc0029>*</font>"; String text = "<font color=#8c8c8c>"+argHintMessage+"</font>"; argEditText.setHint(Html.fromHtml(text)); }else{ argEditText.setHint(argHintMessage); } }catch(Exception e){ e.printStackTrace(); } return argEditText; } 

Llamar a este método se parece a esto ..

 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); 

Usando it i han añadido con éxito color rojo * marca en pista usando este método. Debe cambiar este método de acuerdo a sus necesidades. Espero que sea útil para ti

Si utiliza – 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); 

Un objeto LinearLayout extiende desde LinearLayout , por lo que contiene otras vistas. El truco consiste en encontrar la vista que contiene el texto de la sugerencia y cambiar el color mediante programación. El problema de intentar encontrar la vista por id es que el identificador depende del tema utilizado en la aplicación. Así que dependiendo del tema utilizado, el findViewById(int id) podría devolver null . Un mejor enfoque que funciona con cada tema es recorrer la jerarquía de la vista y encontrar el widget que contiene el texto de la pista:

 // 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); 

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

Es posible personalizar searchview usando la biblioteca de appcompat v7. Utilicé la biblioteca de appcompat v7 y el estilo personalizado definido para él. En la carpeta dibujable poner el archivo bottom_border.xml que se parece a esto:

  <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape > <solid android:color="@color/blue_color" /> </shape> </item> <item android:bottom="0.8dp" android:left="0.8dp" android:right="0.8dp"> <shape > <solid android:color="@color/background_color" /> </shape> </item> <!-- draw another block to cut-off the left and right bars --> <item android:bottom="2.0dp"> <shape > <solid android:color="@color/main_accent" /> </shape> </item> </layer-list> 

En la carpeta de valores styles_myactionbartheme.xml:

  <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppnewTheme" parent="Theme.AppCompat.Light"> <item name="android:windowBackground">@color/background</item> <item name="android:actionBarStyle">@style/ActionBar</item> <item name="android:actionBarWidgetTheme">@style/ActionBarWidget</item> </style> <!-- Actionbar Theme --> <style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse"> <item name="android:background">@color/main_accent</item> <!-- <item name="android:icon">@drawable/abc_ic_ab_back_holo_light</item> --> </style> <style name="ActionBarWidget" parent="Theme.AppCompat.Light"> <!-- SearchView customization--> <!-- Changing the small search icon when the view is expanded --> <!-- <item name="searchViewSearchIcon">@drawable/ic_action_search</item> --> <!-- Changing the cross icon to erase typed text --> <!-- <item name="searchViewCloseIcon">@drawable/ic_action_remove</item> --> <!-- Styling the background of the text field, ie blue bracket --> <item name="searchViewTextField">@drawable/bottom_border</item> <!-- Styling the text view that displays the typed text query --> <item name="searchViewAutoCompleteTextView">@style/AutoCompleteTextView</item> </style> <style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView"> <item name="android:textColor">@color/text_color</item> <!-- <item name="android:textCursorDrawable">@null</item> --> <!-- <item name="android:textColorHighlight">@color/search_view_selected_text</item> --> </style> </resources> 

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

  <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:com.example.actionbartheme="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/search_buttonn" com.example.actionbartheme:showAsAction="ifRoom|collapseActionView" com.example.actionbartheme:actionViewClass="android.support.v7.widget.SearchView"/> </menu> 

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

  @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 el archivo de manifiesto:

  <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppnewTheme" > 

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 appcompat-v7 con searchView (proporcionada a través de MenuItemCompat):

Establecer el tema de la barra de herramientas en @ style / ThemeOverlay.AppCompat.Light producirá el color oscuro (negro) para el texto de la pista y para el texto introducido, pero no afectará al cursor * color. En consecuencia, si se establece el tema de la barra de herramientas en @ style / ThemeOverlay.AppCompat.Dark, se obtendrá un color claro (blanco) para el texto de la pista y el texto introducido, el cursor * será blanco de todas formas.

Personalización de los temas anteriores:

Android: textColorPrimary -> color del texto introducido

EditTextColor -> color del texto introducido (anulará el efecto de android: textColorPrimary si se establece)

Androide: textColorHint -> color de la pista

* Nota: Todavía hay 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); 

Esto está funcionando 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); } 

He intentado y encontrar una solución para esto. Creo que te ayudará

 searchView.setBackgroundColor(Color.WHITE); 

Introduzca aquí la descripción de la imagen

Cambie el color del texto mecanografiado:

  ((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); 

Cambie el color del texto de la indirecta:

  ((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); 

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

 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 ayudarles chicos. :RE

 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 la biblioteca de Holoeverywhere. Tenga en cuenta la 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 en una entrada del blog. Vea aquí .

Básicamente, el estilo searchViewAutoCompleteTextView y tener android: actionBarWidgetTheme heredar 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); } 

Guau. Mucha respuesta. 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;

 <style name="YourTheme.Searching" parent="YourTheme"> <item name="android:textColorPrimary">@android:color/white</item> </style> 

Crear un estilo para tu Toolbar

 <style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar"> <item name="android:editTextColor">@color/some_color</item> </style> 

Y configurarlo como tema para la Toolbar

 <android.support.v7.widget.Toolbar android:theme="@style/AppTheme.Toolbar" ... 

La manera más limpia es:

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

Ahora hazlo como:

ToolbarStyle parent "ThemeOverlay.AppCompat.Dark.Actionbar"

Agregue este artículo en ese estilo

Nombre del artículo "android: editTextColor"> yourcolor

Hecho.

Otra cosa muy importante es, en la barra de herramientas, poner layout_height = "? Attr / actionbarSize". Por defecto es wrap_content.Para mí el texto ni siquiera era visible en searchview arregló ese problema.

La conversión de SearchView a TextView le permite utilizar los métodos de TextView para cambiar su color:

 ((TextView) searchView).setTextColor(Color.WHITE); ((TextView) searchView).setHintTextColor(Color.WHITE); 
  • ¿Cómo agregar vista como fondo a la superficie?
  • No se puede importar android.support.design.widget.NavigationView
  • Cómo agregar vista de superposición sobre otra vista en android?
  • Cómo agregar la misma vista a los padres varias veces inflando sólo una vez
  • Eliminar un oyente de una vista en android
  • ¿Cómo puedo recuperar el botón de trabajo cuando searchview en Android
  • ListView de filtros de búsqueda de Android
  • ¿Cómo puedo añadir contenido personalizado en una vista de navegación
  • ¿Hay alguna manera de controlar las vistas dentro del encabezado de NavigationView?
  • ¿Cómo crear un semicírculo transparente?
  • Android Multiple SurfaceViews
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.