Подтвердить что ты не робот

Как удалить белое подчеркивание в виджет SearchView на панели инструментов Android

Я использую виджет поиска панели инструментов в своем проекте. Все работает нормально, но ожидайте того, что я полностью застрял, удалив подчеркивание под полем поиска на моей панели инструментов. Я пробовал много решений, и ничего не получается. Ниже приведены некоторые из решений, которые я пробовал.

Требование состоит в удалении белого подчеркивания на изображении

enter image description here

Ist Решение:

//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-е решение:

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

Приведенный выше код работает, чтобы изменить фон EditText, но все же подчеркивание отображается ниже значком закрытия в SearchBar.

Полный код, который я использую для виджета SearchBar следующим образом:

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

возможный дубликат this

Спасибо заранее, любые решения и предложения были бы очень полезны для меня.

4b9b3361

Ответ 1

Попробуйте сделать следующее

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

Надеюсь, это поможет вам.

Ответ 2

Если вы используете SearchView, используйте для API ниже 21

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

вы можете использовать приведенный ниже код, если используете API 21 или более

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

Ответ 3

Или вы можете сделать это через стили:

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

queryBackground - это атрибут для фона запроса. Если вы поддерживаете голосовой поиск, вы можете удалить линию под этой кнопкой микрофона. То, что для атрибута submitBackground.

Затем, конечно, примените стиль к своей теме.

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

Ответ 4

Просто добавьте эту строку, если вы используете виджет v7

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

Ответ 5

Вы можете попробовать использовать приведенный ниже код, для меня это как шарм.

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

Ответ 6

Для AndroidX я использовал это, основываясь на других ответах здесь,

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

Ответ 7

Код для изменения цвета фона текста редактирования SearchView ниже

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

Если цвет фона панели действий белый, вызовите описанный выше метод следующим образом.

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

Теперь подчеркивание текста редактирования SearchView исчезнет.

Ответ 8

Сначала вы должны получить суть просто так:

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

Затем вы должны установить прозрачный цвет фона следующим образом:

searchPlate.setBackgroundColor(Color.TRANSPARENT);

Это прекрасно работает для androidx.appcompat.widget.SearchView!

Ответ 9

Следующее решение проблемы идеально для меня:

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