J'utilise le widget de recherche de la barre d'outils dans mon projet. Tout fonctionne bien mais attendez-vous à ce que je suis complètement coincé avec la suppression du soulignement sous le champ de recherche dans ma barre d'outils. J'ai essayé de nombreuses solutions et rien ne fonctionne. Voici quelques-unes des solutions que j'ai essayées.
L'exigence est de supprimer le soulignement blanc dans l'image
Première solution:
//Removing underline
int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_plate", null, null);
View searchPlate = searchView.findViewById(searchPlateId);
if (searchPlate!=null) {
searchPlate.setBackgroundColor (Color.TRANSPARENT);
int searchTextId = searchPlate.getContext ().getResources ().getIdentifier ("Android:id/search_src_text", null, null);
}
IIème solution:
EditText searchEdit = ((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text));
searchEdit.setBackgroundColor(Color.TRANSPARENT);
Le code ci-dessus fonctionne pour changer l'arrière-plan de EditText, mais le soulignement s'affiche toujours sous l'icône de fermeture dans SearchBar.
Code complet que j'utilise pour le widget SearchBar comme suit:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater infl) {
super.onCreateOptionsMenu(menu, infl);
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.action_search, menu);
final SearchView searchView = (SearchView) MenuItemCompat
.getActionView(menu.findItem(R.id.search));
SearchManager searchManager = (SearchManager) getActivity ().getSystemService (getActivity ().SEARCH_SERVICE);
searchView.setSearchableInfo (searchManager.getSearchableInfo (getActivity ().getComponentName ()));
//changing edittext color
EditText searchEdit = ((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text));
searchEdit.setTextColor(Color.WHITE);
}
action_search.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:compat="http://schemas.Android.com/apk/res-auto">
<item Android:id="@+id/search"
Android:title="Search"
Android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
compat:showAsAction="ifRoom|collapseActionView"
compat:actionViewClass="Android.support.v7.widget.SearchView" />
</menu>
doublon possible de ceci
Merci d'avance, toutes sortes de solutions et suggestions me seraient très utiles.
Essayez une fois comme suit
View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(Color.parseColor("here give actionbar color code"));
J'espère que cela vous aidera.
Si vous utilisez SearchView, utilisez l'API ci-dessous 21
Android:queryBackground="@Android:color/transparent"
vous pouvez utiliser le code ci-dessous si vous utilisez API 21 ou plus
app:queryBackground="@Android:color/transparent"
Ou vous pouvez le faire à travers des styles:
<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
<item name="submitBackground">@color/primaryColor</item>
<item name="queryBackground">@color/primaryColor</item>
</style>
queryBackground est un attribut pour l'arrière-plan de la requête. Si vous prenez en charge la recherche vocale, vous souhaiterez peut-être supprimer la ligne également sous ce bouton micro. C'est à quoi sert l'attribut submitBackground.
Ensuite, bien sûr, appliquez le style à votre thème.
<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
<item name="searchViewStyle">@style/SearchViewMy</item>
</style>
Ajoutez simplement cette ligne si vous utilisez un widget v7
app:queryBackground="@Android:color/transparent"
Vous pouvez essayer d'utiliser le code ci-dessous, fonctionne comme un charme pour moi.
View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(ContextCompat.getColor(context,Android.R.color.transparent));
Pour AndroidX, je l'ai utilisé sur la base d'autres réponses ici,
mSearchView.findViewById(androidx.appcompat.R.id.search_plate)
.setBackgroundColor(Color.TRANSPARENT);
Le code pour changer la couleur d'arrière-plan du texte d'édition de SearchView est ci-dessous
public static void setSearchViewEditTextBackgroundColor(Context context, SearchView searchView, int backgroundColor){
int searchPlateId = context.getResources().getIdentifier("Android:id/search_plate", null, null);
ViewGroup viewGroup = (ViewGroup) searchView.findViewById(searchPlateId);
viewGroup.setBackgroundColor(ComponentUtils.getColor(context, backgroundColor));
}
Si la couleur d'arrière-plan de votre barre d'action est blanche, appelez la méthode ci-dessus comme suit.
setSearchViewEditTextBackgroundColor(this, searchView, R.color.white);
Maintenant, le soulignement du texte d'édition de SearchView disparaîtra.
Tout d'abord, vous devriez obtenir le résultat net comme ceci:
searchPlate = (View) findViewById(R.id.search_plate);
Ensuite, vous devez définir la couleur d'arrière-plan sur transparent comme ceci:
searchPlate.setBackgroundColor(Color.TRANSPARENT);
Cela fonctionne parfaitement pour androidx.appcompat.widget.SearchView!