web-dev-qa-db-fra.com

Comment changer l'icône par défaut de SearchView?

J'ai utilisé " Android Action Bar Generator " pour générer mon propre thème Holo . Ensuite, j'ai ajouté deux icônes à la barre d'action, l'une pour un filtre de recherche et l'autre pour un sélecteur de fichiers, les deux icônes sont blanches. L'icône du sélecteur de fichiers (à droite) a l'air bien, mais l'icône de recherche est gris foncé. Lorsque vous tapez dans la vue du texte de recherche, le bouton de fermeture est également gris foncé.

J'ai essayé de changer la couleur de la barre d'action et aussi de la vue de recherche, sans succès. Pourquoi la vue de recherche affiche-t-elle cette couleur? Comment puis-je le changer?

ActionBar with two actions

Merci beaucoup.

UPDATE: je pensais que mon application utilisait mon icône mais ce n'est pas le cas. Elle utilise l'icône de vue de recherche par défaut. Ma question est donc: comment puis-je changer l'icône par défaut de la vue de recherche? Cette phrase du fichier menu.xml ne fonctionne pas: 

Android:icon="@drawable/selectable_header_search"
16
jmhostalet

Malheureusement, il n’existe pas de moyen simple de remplacer l’icône SearchView par un dessin personnalisable, l’attribut theme searchViewSearchIcon n'étant pas public. Voir this answer pour plus de détails.

Cependant, je pense que votre problème est causé par l'héritage du mauvais thème. Veuillez utiliser Android:Theme.Holo.Light.DarkActionBar comme base pour votre thème. Ensuite, les icônes par défaut de la barre d’action doivent être de couleur claire.

<style name="AppTheme" parent="Android:Theme.Holo.Light.DarkActionBar">
    ...
</style> 
18
Matthias Robbers

L'attribut searchViewSearchIcon n'étant pas public, vous pouvez modifier l'icône à l'aide du code suivant:

int searchIconId = searchView.getContext().getResources().getIdentifier("Android:id/search_button",null, null);
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId);
searchIcon.setImageResource(R.drawable........);
10
mspapant

Essayez de mettre en place dans le showAsAction cette option:

Sans cette option, SearchView ne prend pas l'icône que vous avez configurée pour le bouton d'action.

menu.add("Search")
            .setIcon(
                    getResources().getDrawable(
                            R.drawable.selectable_header_search))
            .setActionView(searchView)
            .setShowAsAction(
                    MenuItem.SHOW_AS_ACTION_ALWAYS
                            | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
                            | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
6
timudgin

Le moyen le plus simple que j'ai trouvé de changer l'icône de recherche par défaut dans la barre d'action est d'utiliser le menu onPrepareOptions. Vous pouvez voir ma réponse ici à une question similaire!

0
just_user

Dans votre style de thème, incluez ceci:

<style name="YourTheme.Toolbar">
    <item name="searchViewStyle">@style/YourActionBarSearch</item>
    <item name="editTextColor">@color/your_ab_text_color</item>
    <item name="Android:textColorHint">@color/your_ab_hint_color</item>
</style>

Vous pouvez maintenant définir le style de SearchView avec searchViewStyle, et editTextColor définira la couleur du texte dans le champ de recherche. En définissant Android:textColorHint, vous définissez également la couleur de l'indice, par exemple. "Chercher...".

<style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView">
    <item name="searchIcon">@drawable/ic_ab_search</item>
    <item name="queryBackground">@null</item>
    <item name="submitBackground">@null</item>
    <item name="searchHintIcon">@drawable/ic_ab_small_search</item>
    <item name="defaultQueryHint">@string/toolbar_search_hint</item>
    <item name="closeIcon">@drawable/ic_ab_small_search_close</item>
</style>

Cela donnera plus ou moins de style à votre vue de recherche à votre guise. Le champ searchIcon est l’icône de la barre d’action. Le champ searchHintIcon est la petite icône à gauche du conseil dans le champ de recherche. Le champ closeIcon est l’icône de fermeture située à droite du champ de recherche.

Regardez ceci, pour plus de paramètres de style:

$Android_SDK/platforms/Android-24/data/res/values/styles_holo.xml
0
Per Löwgren