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?
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).
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.
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);
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);
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);
}
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!
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);
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>
Dans xml dans le composant searchView, ajoutez ensuite:
app:searchHintIcon="@null"
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.