131 votes

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

L'élément SearchView n'a aucune propriété pour changer la couleur du texte. La couleur de texte par défaut est le noir et ne fonctionne pas sur notre fond 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, il n'a pas de réponse: Comment définir SearchView TextSize?

103voto

lokoko Points 2496

Essayez quelque chose comme ceci: vous obtiendrez une poignée de la vue texte à partir du sdk, puis vous le changerez 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);
 

29voto

CoolMind Points 11

Pour moi, les travaux suivants. J'ai utilisé un code à partir d'un lien: Changer la couleur du texte de la recherche de pointe dans l'actionbar avec le soutien de la bibliothèque.

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

Modification de la barre d'action searchview astuce couleur du texte des conseils d'une autre solution. Il fonctionne, mais ne règle que la pointe de texte et de la couleur.

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

26voto

Ferran Maylinch Points 394

Je voulais faire quelque chose de similaire. J'ai finalement dû trouver le TextView parmi les SearchView enfants:

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

16voto

johnarleyburns Points 448

Ceci est mieux réalisé par le biais de styles personnalisés. Surchargez le style de widget de la barre d'action avec votre propre style personnalisé. Pour holo light avec 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 un thème personnalisé tel que décrit dans la description du lien ici.

4voto

Tjeerd Points 87

Si vous avez la base de votre application, le thème holo thème, vous obtiendrez un blanc au lieu de noir, d'un texte dans votre SearchView

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

Je n'ai pas trouvé d'autre moyen pour changer le textcolor de la searchview sans l'aide de sale hacks.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X