web-dev-qa-db-fra.com

Comment supprimer le soulignement blanc dans un widget SearchView dans la barre d'outils Android

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

enter image description here

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.

45
Chandru

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.

43
Nagaraju V

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"
70
kshitij jain

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>
39
Tomask

Ajoutez simplement cette ligne si vous utilisez un widget v7

app:queryBackground="@Android:color/transparent"
12
Sharana Hiremath

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

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);
3
Ebrahim Byagowi

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.

1
Siddarth Kanted

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!

0
Ali Najafi