web-dev-qa-db-fra.com

Icône Android SearchView

Je souhaite désactiver l'icône Mag affichée à l'intérieur du composant de vue de recherche. Une idée comment le référencer et l'enlever ou le remplacer par un autre dessinable?

enter image description here

29
Harsha M V

Dans votre thème:

<style name="Theme" parent="Your parent theme">
<item name="Android:searchViewSearchIcon">@Android:drawable/ic_search</item>
</style>

Modifier:
searchViewSearchIcon est un attribut privé. Cette réponse ne fonctionne donc pas (sur le ActionBar natif).

6
Ahmad

Puisque le libellé de la question ne contient aucune mention de ActionBarSherlock (à l'exception de la balise) et que des commentaires ont été ajoutés, indiquant que la réponse acceptée ne fonctionne pas pour la barre d'action des bibliothèques standard et/ou de support, je poste une autre réponse. Voici le code Java pour onCreate:

// obtain action bar
ActionBar actionBar = getSupportActionBar();

// find SearchView (im my case it's in a custom layout because of left alignment)
View v = actionBar.getCustomView();
SearchView searchView = (SearchView)v.findViewById(R.id.search_view);
ImageView icon = (ImageView)searchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);

// method 1: does not work persistently, because the next line
// should be probably called after every manipulation with SearchView
// icon.setVisibility(View.GONE);

// method 2: working code
icon.setAdjustViewBounds(true);
icon.setMaxWidth(0);
icon.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
icon.setImageDrawable(null);

Selon ce post , lors de l’utilisation de SearchView de la bibliothèque de support (Android-support-v7-appcompat dans mon cas) avec setIconifiedByDefault(false), l’icône est affichée en dehors de la zone de texte de saisie (SearchAutoComplete). Sinon (setIconifiedByDefault(true)), il est affiché à l'intérieur de la boîte. Le code présenté est utilisé par défaut pour "iconification" désactivée et peut nécessiter certaines modifications pour fonctionner avec la vue de recherche "iconifiée". Je ne sais pas si la même chose s'applique à ActionBarSherlock.

J'espère que cela t'aides.

14
Stan

Cette icône est un indice. Ainsi, vous pouvez simplement définir un nouveau texte d'aide.

int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);

    searchPlate.setHint("Search");

Si vous voulez que l’icône soit utilisée comme texte d’aide, utilisez une chaîne extensible avec ImageSpan

int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);


    searchPlate.setTextColor(getResources().getColor(R.color.search_text_color));
    SpannableString string = new SpannableString(" ");
    Drawable d = getResources().getDrawable(R.drawable.ic_search);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
    string.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    searchPlate.setHint(string);
7

Pour supprimer le bouton de recherche d'indice:

mNearMeSearchBar = (SearchView) mView.findViewById(R.id.nearme_search_component_nearme_edittext);
mNearMeSearchBar.setIconifiedByDefault(false); //Removes Search Hint Icon

Pour changer le bouton de recherche pouvant être dessiné:

int searchImgId = getResources().getIdentifier("Android:id/search_mag_icon", null, null);
ImageView v = (ImageView) mNearMeSearchBar.findViewById(searchImgId);
v.setImageResource(R.drawable.ic_compass);
2
Mariana

Vous devez ajouter cette ligne dans votre MenuItem Android:iconifiedByDefault="@Android:color/transparent"

<item
    Android:id="@+id/activity_home_action_search"
    Android:icon="@drawable/ic_action_search"
    Android:title="@string/activity_home_search_title"
    Android:iconifiedByDefault="@Android:color/transparent"
    app:actionViewClass="Android.support.v7.widget.SearchView"
    app:showAsAction="always|collapseActionView" />

Ou vous pouvez faire un programme searchView.setIconifiedByDefault(true);

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    getMenuInflater().inflate(R.menu.home, menu);

    MenuItem searchMenuItem = menu.findItem(R.id.activity_home_action_search);

    SearchView searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setIconifiedByDefault(true);
}
2
Cabezas

Vous devez personnaliser le style SearchView comme ceci:

<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
    <!-- Search button icon -->
    <item name="searchIcon">@drawable/ic_arrow_back</item>
</style>

Et puis ajoutez-le dans votre AppTheme.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!--   your other colors and styles -->
    <item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>

Et appliquez-le à votre recherche en utilisant le tag style:

<Android.support.v7.widget.SearchView
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            xmlns:app="http://schemas.Android.com/apk/res-auto"
            Android:id="@+id/searchView"
            Android:layout_height="wrap_content"
            Android:layout_width="match_parent"
            app:queryHint="@string/search_hint"
            Android:focusable="true"
            Android:focusableInTouchMode="true"
            style="@style/MySearchViewStyle"
            app:iconifiedByDefault="false" />

J'espère que ça aide!

2
Isaac Urbina

Ces lignes ont enlevé la loupe:

    //remove search icon
    mSearchView.setIconifiedByDefault(false);
    ImageView icon = (ImageView) mSearchView.findViewById(Android.support.v7.appcompat.R.id.search_mag_icon);
    icon.setVisibility(View.GONE);
1
fireworks

Si vous utilisez la bibliothèque d'applications v7, vous pouvez facilement changer cela dans le thème. Dans votre thème qui s'étend d'un thème AppCompat, ajoutez simplement une ligne comme celle-ci:

<item name="searchViewSearchIcon">@drawable/ic_search</item>
1
user486646

Dans xml dans le composant searchView, ajoutez ensuite:

app:searchHintIcon="@null"
0
Alex

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">@null</item>
    <item name="defaultQueryHint">@null</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 dans la barre d'action. Le champ searchHintIcon est la petite icône à gauche du conseil dans le champ de recherche , que vous demandez dans votre question; réglez-le sur @null pour supprimer l'icône. Le champ closeIcon est l’icône de fermeture située à droite du champ de recherche.

0
Per Löwgren