如何在工具栏Android中的SearchView小部件中删除白色下划线

时间:2015-06-15 10:31:06

标签: android searchview android-toolbar android-search

我在项目中使用工具栏搜索小部件。一切正常,但期待我完全坚持删除工具栏中搜索字段下方的下划线。我尝试过很多解决方案但没有任何效果。以下是我尝试的一些解决方案。

要求删除图片中的白色下划线

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

    }

IInd解决方案:

 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

可能重复

在此先感谢,任何类型的解决方案和建议对我都非常有用。

11 个答案:

答案 0 :(得分:59)

如果您使用的是SearchView,请使用21以下的API

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

如果您使用的是API 21或更高版本,则可以使用以下代码

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

答案 1 :(得分:42)

尝试如下

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

希望这会对你有所帮助。

答案 2 :(得分:39)

或者您可以通过样式执行此操作:

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

答案 3 :(得分:8)

如果您使用的是v7小部件,只需添加此行

应用程式:queryBackground = “@机器人:彩色/透明”

答案 4 :(得分:6)

您可以尝试使用以下代码,对我来说就像一个魅力。

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

答案 5 :(得分:2)

对于AndroidX,我根据此处的其他答案使用了此

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

答案 6 :(得分:1)

更改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编辑文本的下划线将消失。

答案 7 :(得分:1)

下面的代码对我有用。

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

答案 8 :(得分:0)

首先,您应该像这样简单地获得利润:

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

然后,您应将背景颜色设置为透明:

searchPlate.setBackgroundColor(Color.TRANSPARENT);

这非常适合androidx.appcompat.widget.SearchView!

答案 9 :(得分:0)

对于 androidx 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)

答案 10 :(得分:-4)

以下为我完美地解决了这个问题:

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