Est-il possible de changer la couleur du texte sur un SearchView Android?

115

L'élément SearchView n'a aucune propriété pour modifier la couleur du texte. La couleur du texte par défaut est le noir et ne fonctionne pas sur notre arrière-plan sombre. Existe-t-il un moyen de changer la couleur du texte sans recourir à des hacks?

J'ai trouvé cette question similaire liée à la modification de la taille du texte, mais jusqu'à présent, elle n'a pas de réponse: Comment définir SearchView TextSize?

CACuzcatlan
la source
1
J'aimerais une réponse pour cela.
TheLettuceMaster
veuillez mentionner ce que vous avez essayé.
Sahil Mahajan Mj

Réponses:

121

Ajouter

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

au thème parent et cela devrait changer le texte saisi. Vous pouvez aussi utiliser

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

pour modifier le texte d'indication de SearchView. (Notez que vous pouvez remplacer le @android:color/whitepar la valeur appropriée que vous espérez utiliser)

akdotcom
la source
1
Cela a résolu le problème pour moi et n'a pas impliqué de manigances compliquées utilisant la réflexion. Fonctionne également avec appcompat.
dj_bushido
Vous pouvez également définir android: theme sur la vue de recherche sur un style qui a l'élément android: editTextColor. De cette façon, vous n'affectez que cette vue de recherche.
Pepijn
2
Ça marche! J'utilisais une vue de recherche dans une barre d'outils, j'ai étendu ThemeOverlay.AppCompat.Light et j'ai ajouté l'élément ci-dessus et défini le style sur le widget de la barre d'outils;) Fonctionne comme un charme ...
codename_47
Cette solution ne fonctionne pas pour moi. Le texte a toujours la mauvaise couleur. La réponse ci-dessous avec le réglage de la couleur de l'indice a fonctionné par programmation pour moi.
Dominik
4
Le problème avec cette réponse est qu'elle changera également la couleur du texte de votre EditTexts. La seule solution qui a fonctionné pour moi et qui change SearchViewuniquement la couleur du texte est ici: stackoverflow.com/a/40550067/1617737
ban-geoengineering
96

Essayez quelque chose comme ceci: vous obtiendrez un descripteur de la vue de texte à partir du sdk, puis vous le changeriez car ils ne l'exposent pas publiquement.

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
Lokoko
la source
J'aime les solutions élégantes
Mohsen Afshin
29
Cela renvoie toujours null
danielrvt-sgb
Notez que si vous utilisez ActionBarSherlock, les ID de vue seront différents. Par exemple, la bibliothèque définit actuellement l'ID du texte d'édition sur "package: id / abs__search_src_text", qui peut être accédé directement via R.id.abs__search_src_text.
greg7gkb
3
De plus, ce que je voulais réellement changer, c'était la couleur du texte de l'indicateur SearchView, ce qui se fait facilement via textView.setHintTextColor ().
greg7gkb
3
C'est un hack très sale. Utilisez plutôt Android: editTextColor et Android: textColorHint comme akdotcom suggéré
Philipp Hofmann
69

Cela fonctionne pour moi.

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));
user2331095
la source
1
Cela fonctionne également si vous obtenez la vue en tant que TextView ou même en tant que AutoCompleteTextView.
Juan José Melero Gómez
Oui, c'est du travail pour moi après avoir suivi la suggestion de @ JuanJoséMeleroGómez
Parth Patel
Je suppose que cela a été copié et raccourci de ma réponse ici: stackoverflow.com/a/26251197/2914140 .
CoolMind
24

Je voulais faire quelque chose de similaire. J'ai finalement dû trouver le TextViewparmi les SearchViewenfants:

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

Si vous voulez la méthode 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;
}
Ferran Maylinch
la source
3
Moi aussi, je recevais l'exception nulle avec les solutions précédentes, et cela a fonctionné pour moi!
Diego Ponciano
1
Cela doit être marqué comme réponse acceptée. Celui ci-dessus donne nul. Merci pour le bon
compagnon de
3
Cette solution est tellement dégoûtante mais c'est la seule qui fonctionne réellement et c'est l'équipe Android à blâmer!
Ofek Ron
Comment pourrions-nous accéder à l'icône de recherche avec cela?
Yasin Yaqoobi
17

Grâce à @CzarMatt, j'ai ajouté le support AndroidX .

Pour moi, les travaux suivants. J'ai utilisé un code à partir d'un lien: Changer la couleur du texte de l'indicateur de recherche dans la barre d'action à l'aide de la bibliothèque de support .

    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

    EditText txtSearch = ((EditText)searchView.findViewById(androidx.appcompat.R.id.search_src_text));
    txtSearch.setHint(getResources().getString(R.string.search_hint));
    txtSearch.setHintTextColor(Color.LTGRAY);
    txtSearch.setTextColor(Color.WHITE);

La modification de la couleur du texte du conseil de recherche de la barre d'action conseille une autre solution. Cela fonctionne mais ne définit que le texte et la couleur des indices.

    searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));
CoolMind
la source
1
À utiliser androidx.appcompat.R.id.search_src_textsi vous avez migré votre projet vers AndroidX.
CzarMatt
16

Ceci est mieux réalisé grâce à des styles personnalisés. Surchargez le style de widget de la barre d'action avec votre propre style personnalisé. Pour holo light avec une barre d'action sombre, placez-le dans votre propre fichier de styles tel que 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>

Assurez-vous que votre application utilise le thème personnalisé du thème comme décrit dans entrez la description du lien ici

johnarleyburns
la source
14

Vous pouvez le faire en définissant l' editTextColorattribut dans le style.

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

et vous appliquez ce style à Toolbarou SearchViewà la mise en page.

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

    <android.support.v7.widget.SearchView />

</android.support.v7.widget.Toolbar>
plus vieux
la source
+1 Cela l'emporte sur toutes les solutions impliquant findViewById à mon humble avis. Le style de vue doit être utilisé dans la mesure du possible.
Mattias
Cela devrait être la réponse acceptée! Très propre et facile.
MSeiz5
8

si vous utilisez - 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);

à Kotlin

val searchView = SearchView(this)
val editText = searchView.findViewById<EditText>(androidx.appcompat.R.id.search_src_text)
editText.setTextColor(Color.WHITE)

Vous devriez plutôt commencer à utiliser les bibliothèques de support androidx maintenant

zankoav
la source
7

Créez un style pour votre Toolbar

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

Et définissez-le comme thème de la Toolbar

<android.support.v7.widget.Toolbar
    android:theme="@style/AppTheme.Toolbar"
    ...
Arbitur
la source
6

Si vous utilisez android.support.v7.widget.SearchView, c'est possible sans avoir à utiliser la réflexion.

Voici comment je le fais dans mon application:

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

Ils n'exposent pas les identifiants publiquement pour SearchView non compatible avec l'application, mais ils le font pour AppCompat si vous savez où chercher. :)

LukeWaggoner
la source
Cela fonctionne plutôt bien sur divers appareils. Joli.
Shark
5

J'ai eu ce problème, et cela fonctionne pour moi.

@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;
}
Alexandre
la source
4
J'obtiens toujours null sur: (TextView) searchView.findViewById (id);
danielrvt-sgb
4

Si vous basez le thème de votre application sur le thème holo, vous obtiendrez un texte blanc au lieu d'un texte noir dans votre SearchView.

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

Je n'ai trouvé aucun autre moyen de changer la couleur du texte de la vue de recherche sans utiliser de sales hacks.

Tjeerd
la source
1
Cela n'a pas fonctionné. J'espérais que ce serait le cas, car c'est beaucoup plus simple que de rechercher manuellement un ID de vue "magique". J'ai essayé plusieurs thèmes, avec une activité dont la mise en page a un fond sombre, mais aucun d'entre eux n'a produit autre chose que du texte noir dans SearchView.
E-Riz
4

Le moyen le plus propre est:

La barre d'outils utilise le thème ThemeOverlay.AppCompat.Dark.Actionbar.

Maintenant, faites-en enfant comme:

toolbarStyle parent "ThemeOverlay.AppCompat.Dark.Actionbar"

ajouter cet article dans ce style

nom de l'élément "android: editTextColor"> yourcolor

Terminé.

Une autre chose très importante est, dans la barre d'outils, mettre layout_height = "? Attr / actionbarSize". Par défaut, il s'agit de wrap_content.Pour moi, le texte n'était même pas visible dans la vue de recherche, cela a résolu ce problème.

Sharad
la source
4

Oui, c'est possible en utilisant la méthode suivante.

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

L'appel de cette méthode ressemble à ceci.

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

en l'utilisant, j'ai réussi à ajouter une marque de couleur rouge * dans un indice en utilisant cette méthode. Vous devez changer cette méthode en fonction de vos besoins. J'espère que cela vous sera utile .... :)

DynamicMind
la source
c'est un peu compliqué pour moi.
gaols
1
String text = "<font color = # 8c8c8c>" + HintMessage + "</font>"; argEditText.setHint (Html.fromHtml (texte)); vous pouvez également utiliser uniquement ces deux codes de ligne pour définir une indication de couleur
DynamicMind
1
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); c'est ma solution, mais je pense que la vôtre est meilleure que la mienne, je vais utiliser votre solution, merci.
gaols
@gaols avez-vous une solution ..?
DynamicMind
@ gaols, où est votre "com.android.internal.R.id.search_src_text"?
wangqi060934
3

Utilisez celui-ci, c'est vrai. :RÉ

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

Oui nous pouvons,

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

Pour appliquer la couleur blanche au texte SerachView,

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

Bon codage !!!!

Srinivasan
la source
3

Cela fonctionne pour moi.

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);
}
Krishna Mohan Singh
la source
3

Changer la couleur du texte saisi:

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

Changer la couleur du texte de l'indice:

((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);
Fabio Guerra
la source
2
TextView textView = (TextView) searchView.findViewById(R.id.search_src_text);
textView.setTextColor(Color.BLACK);
Yuwen
la source
1

Un SearchViewobjet s'étend de LinearLayout, donc il contient d'autres vues. L'astuce consiste à trouver la vue contenant le texte de l'indice et à modifier la couleur par programmation. Le problème avec la recherche de la vue par identifiant est que l'identifiant dépend du thème utilisé dans l'application. Donc, selon le thème utilisé, la findViewById(int id)méthode peut retourner null. Une meilleure approche qui fonctionne avec chaque thème consiste à parcourir la hiérarchie des vues et à trouver le widget contenant le texte de l'indice:

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

À l'aide de cette méthode, vous pouvez également modifier l'apparence d'autres widgets de la SearchViewhiérarchie, tels que la EditTextconservation de la requête de recherche. À moins que Google ne décide de modifier la hiérarchie des vues d'un SearchViewbref délai, vous devriez être en mesure de modifier l'apparence du widget avec cette méthode pendant un certain temps.

jfcartier
la source
1

Il est possible de personnaliser la vue de recherche en utilisant la bibliothèque appcompat v7, j'ai utilisé la bibliothèque appcompat v7 et j'ai défini un style personnalisé pour celle-ci. Dans le dossier drawable, placez le fichier bottom_border.xml qui ressemble à ceci:

 <?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>

Dans le dossier de valeurs 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>

J'ai défini le fichier custommenu.xml pour afficher le menu:

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

Votre activité doit étendre ActionBarActivity au lieu d'Activité. Voici la méthode 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);
  }

Dans le fichier manifeste:

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

Pour plus d'informations, consultez cette url:
Ici http://www.jayway.com/2014/06/02/android-theming-the-actionbar/

Suhas Patil
la source
1

pour la barre d'outils appcompat-v7 avec searchView (fournie via MenuItemCompat):

La définition du thème de la barre d'outils sur @ style / ThemeOverlay.AppCompat.Light donnera une couleur sombre (noir) pour le texte d'indication et pour le texte saisi, mais n'affectera pas la couleur du curseur *. En conséquence, définir le thème de la barre d'outils sur @ style / ThemeOverlay.AppCompat.Dark donnera une couleur claire (blanc) pour le texte d'indication et le texte saisi, le curseur * sera de toute façon blanc.

Personnalisation des thèmes ci-dessus:

android: textColorPrimary -> couleur du texte saisi

editTextColor -> couleur du texte saisi (remplacera l'effet d'Android: textColorPrimary si défini)

android: textColorHint -> couleur de l'indice

* Remarque: Je n'ai pas encore déterminé comment la couleur du curseur peut être contrôlée (sans utiliser la solution de réflexion).

Straya
la source
La couleur du curseur provient de colorControlActivated
Henry
1

En utilisant cela, j'ai pu modifier le texte de couleur tapé dans la vue de recherche

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

Sensationnel. Beaucoup de réponses. Il obtient la valeur de couleur de votre couleur principale.

Changez-le, et c'est fait!

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

Modes;

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

changer le style de searchView dans la barre d'outils avec androidx.

Tout d'abord, définissez le style de vue de recherche dans le style de votre barre d'outils (changez-les avec votre propre base d'application):

     <!-- toolbar style -->
      <style name="ToolbarStyle" parent="Theme.AppCompat.Light.NoActionBar">     
          <!-- search view about -->
          <item name="android:editTextColor">@color/colorWhitePrimaryText</item>
          <item name="android:textColorHint">@color/colorWhiteSecondaryText</item>
          <item name="android:textCursorDrawable">@drawable/drawable_cursor_white</item>
          <item name="closeIcon">@mipmap/ic_close</item>
          <item name="searchHintIcon">@mipmap/ic_search_white</item>
          <item name="searchIcon">@mipmap/ic_search_white</item>
          <item name="android:longClickable">false</item>
          <item name="android:queryHint">@string/toolbar_search</item>
      </style> 

puis, utilisez-le dans la disposition de votre barre d'outils:

android:theme="@style/ToolbarStyle"

avec cela, vous pouvez modifier la plupart des styles de searchView, à l'exception de l'indicateur de requête.

Enfin, définissez un indice de requête dans les options du menu de votre barre d'outils:

toolbar.setOnMenuItemClickListener(item -> {
        switch (item.getItemId()){
            case R.id.toolbar_search:
                SearchView searchView = (SearchView) item.getActionView();
                searchView.setQueryHint("default query");
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String newText) {
                        return false;
                    }
                });
                return true;
                default:
                    return false;
        }
user2333
la source
Vouliez-vous publier quelque chose sous "style searchView"?
DavidW
J'ai complété et simplifié ma solution, peut-être qu'elle peut vous aider.
user2333
0
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);

J'utilise la bibliothèque Holoeverywhere. Notez le org.holoeverywhere.R.id.search_src_text

Jimmy Ilenloa
la source
0

J'ai trouvé une solution à partir d'un article de blog. Regardez ici .

Fondamentalement, vous style searchViewAutoCompleteTextView et android: actionBarWidgetTheme hérite du style.

art de la feuille
la source
0

ça marche avec moi

@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);
}
Hamza Awwad
la source
0

Ce qui a fonctionné pour moi

((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text));
Suneet Srivastava
la source
0

Pour Kotlin Language

    searchView = view.findViewById(R.id.searchView_Contacts)
    // change color
    val id = searchView.context.resources
        .getIdentifier("android:id/search_src_text", null, null)

    val textView = searchView.findViewById<View>(id) as TextView

    textView.setTextColor(Color.WHITE)
Ali Al Fayed
la source