How to remove white underline in a SearchView widget in Toolbar Android

AndroidSearchviewAndroid ToolbarAndroid Search

Android Problem Overview


I am using the Toolbar search widget in my project. Everything works fine but expect the thing which I am completely stuck up with removing the underline below the search field in my toolbar. I have tried many solutions and nothing works out. Below are some of the solutions that I tried.

Requirement is to remove white underline in the image

enter image description here

Ist 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);

    }

IInd Solution:

 EditText searchEdit = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));
 searchEdit.setBackgroundColor(Color.TRANSPARENT);

The above code works to change the background of EditText but still underline is displaying below the close icon in SearchBar.

Complete code that I am using for SearchBar widget as follows:

    @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>

possible duplicate of this

Android Solutions


Solution 1 - Android

If you are using SearchView then use for API below 21

android:queryBackground="@android:color/transparent"

you can use below code if you are using API 21 or more

app:queryBackground="@android:color/transparent"

Solution 2 - Android

Once try as follows

View v = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(Color.parseColor("here give actionbar color code"));

Hope this will helps you.

Solution 3 - Android

Just add this line if you are using a v7 or androidx widget

app:queryBackground="@android:color/transparent"

Solution 4 - Android

Or you can do this through styles:

<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
    <item name="submitBackground">@color/primaryColor</item>
    <item name="queryBackground">@color/primaryColor</item>
</style>

queryBackground is attribute for the query background. If you support voice search you may want to remove the line also under that mic button. Thats what submitBackground attribute is for.

Then of course apply the style to your theme.

<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="searchViewStyle">@style/SearchViewMy</item>
</style>

Solution 5 - Android

For AndroidX I used this based on other answers here,

searchView.findViewById(androidx.appcompat.R.id.search_plate)
        .setBackgroundColor(Color.TRANSPARENT)

Solution 6 - Android

You can try using the below code, works like a charm for me.

View v = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
    v.setBackgroundColor(ContextCompat.getColor(context,android.R.color.transparent));

Solution 7 - Android

if you want to remove the underline from SearchView, then just copy paste the below code to your SearchView. it works

 android:queryBackground="@null"

like this,

      <SearchView
                android:id="@+id/searchView"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:queryBackground="@null"
                />

Solution 8 - Android

The below piece of code works for me.

val searchView = menu?.findItem(R.id.action_search)?.actionView as SearchView
searchView.findViewById<View>(androidx.appcompat.R.id.search_plate).background = null

Solution 9 - Android

For androidx and kotlin:

        menuInflater.inflate(R.menu.conversation_list_screen_menu, menu)
        val searchItem = menu.findItem(R.id.action_search)
        searchView = searchItem.actionView as SearchView
        searchView?.findViewById<View>(androidx.appcompat.R.id.search_plate)?.setBackgroundColor(Color.TRANSPARENT)

Solution 10 - Android

The code for changing the background color of SearchView edit text is below

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));
}

If your action bar background color is white then call the above method as follow.

setSearchViewEditTextBackgroundColor(this, searchView, R.color.white);

Now the underline from SearchView edit text will disappear.

Solution 11 - Android

First you should get the bottom line simply like this:

searchPlate = (View) findViewById(R.id.search_plate);

Then you should set background color to transparent like this:

searchPlate.setBackgroundColor(Color.TRANSPARENT);

This works perfectly for androidx.appcompat.widget.SearchView!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChandruView Question on Stackoverflow
Solution 1 - AndroidKshitij JainView Answer on Stackoverflow
Solution 2 - AndroidNagaraju VView Answer on Stackoverflow
Solution 3 - AndroidSharana HiremathView Answer on Stackoverflow
Solution 4 - AndroidTomaskView Answer on Stackoverflow
Solution 5 - AndroidEbrahim ByagowiView Answer on Stackoverflow
Solution 6 - AndroidranasahaView Answer on Stackoverflow
Solution 7 - AndroidPir Fahim ShahView Answer on Stackoverflow
Solution 8 - AndroidSaurabh AgrawalView Answer on Stackoverflow
Solution 9 - AndroidJamil Hasnine TamimView Answer on Stackoverflow
Solution 10 - AndroidSiddarth KantedView Answer on Stackoverflow
Solution 11 - AndroidAli NajafiView Answer on Stackoverflow