icon - ¿Es posible cambiar el textcolor en un Android SearchView?
android searchview color white (30)
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?
Añadir
<item name="android:editTextColor">@android:color/white</item>
al tema principal y eso debería cambiar el texto ingresado. También puedes usar
<item name="android:textColorHint">@android:color/white</item>
para cambiar el texto de sugerencia para SearchView. (Tenga en cuenta que puede reemplazar @android:color/white
con el valor apropiado que espera usar)
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);
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);
Crea un estilo para tu Toolbar
<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="android:editTextColor">@color/some_color</item>
</style>
Y establecerlo como el tema de la Toolbar
<android.support.v7.widget.Toolbar
android:theme="@style/AppTheme.Toolbar"
...
De esta manera :)
View searchPlate = searchView.findViewById(searchPlateId);
if (searchPlate!=null) {
searchPlate.setBackgroundColor(Color.DKGRAY);
int searchTextId = searchPlate.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView searchText = (TextView) searchPlate.findViewById(searchTextId);
if (searchText != null) {
searchText.setTextColor(Color.WHITE);
searchText.setHintTextColor(Color.WHITE);
}
}
return ;
}
Encontré una solución de una publicación de blog. Mira http://www.jayway.com/2014/06/02/android-theming-the-actionbar/ .
Básicamente, el estilo es searchViewAutoCompleteTextView y tiene android: actionBarWidgetTheme hereda el estilo.
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"?>
<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, i.e. 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 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:
<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/
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);
}
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));
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
:
<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 el tema personalizado del tema como se describe en la descripción del enlace aquí
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;
<style name="YourTheme.Searching" parent="YourTheme">
<item name="android:textColorPrimary">@android:color/white</item>
</style>
Intenté y encontré una solución para esto. Creo que te ayudará ...
searchView.setBackgroundColor(Color.WHITE);
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);
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.
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("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));
Puede hacerlo configurando el atributo editTextColor
en el estilo.
<style name="SearchViewStyle" parent="Some.Relevant.Parent">
<item name="android:editTextColor">@color/some_color</item>
</style>
y aplica este estilo a la Toolbar
de Toolbar
o a la vista de SearchView
en el diseño.
<android.support.v7.widget.Toolbar
android:theme="@style/SearchViewStyle">
<android.support.v7.widget.SearchView />
</android.support.v7.widget.Toolbar>
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
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 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 basa el tema de su aplicación en el tema holo recibirá un texto blanco en lugar de negro en su SearchView
<style name="Theme.MyTheme" parent="android:Theme.Holo">
No encontré ninguna otra manera de cambiar el texto de la vista de búsqueda sin usar hacks sucios.
Si está utilizando android.support.v7.widget.SearchView, es posible sin tener que usar el reflejo.
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. :)
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 codificación !!!!
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;
}
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.
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));
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 <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;
}
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);
}
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).
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);
TextView textView = (TextView) searchView.findViewById(R.id.search_src_text);
textView.setTextColor(Color.BLACK);
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