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

Cha*_*dru 48 android searchview android-search android-toolbar

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

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

在此输入图像描述

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

    }
Run Code Online (Sandbox Code Playgroud)

第二解决方案:

 EditText searchEdit = ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));
 searchEdit.setBackgroundColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)

上面的代码用于更改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);
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

可能与重复

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

ksh*_*ain 84

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

android:queryBackground="@android:color/transparent"
Run Code Online (Sandbox Code Playgroud)

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

app:queryBackground="@android:color/transparent"
Run Code Online (Sandbox Code Playgroud)

  • 试试app:queryBackground ="@ android:color/transparent"=) (4认同)
  • 它在 API 29 上对我不起作用:(我仍然看到下划线。 (2认同)
  • TBH,做出决定的不是 API LEVEL,而是您使用的 VIEW 类型。例如,我在 API 28 中使用 `SearchView` (不是 `androidx.appcompat.widget.SearchView` ),那么我应该使用 `android:` 前缀。 (2认同)

Nag*_*u V 44

一旦尝试如下

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

希望这会对你有所帮助.

  • 非常感谢。就我而言,我将Background drawable设置为null,即_searchView.findViewById(android.support.v7.appcompat.R.id.search_plate)setBackground(null)_ (2认同)
  • 帮不了我。下划线是无论如何都留着 (2认同)

Tom*_*ask 39

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

<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
    <item name="submitBackground">@color/primaryColor</item>
    <item name="queryBackground">@color/primaryColor</item>
</style>
Run Code Online (Sandbox Code Playgroud)

queryBackground是查询背景的属性.如果您支持语音搜索,您可能还想删除该麦克风按钮下的线路.这是submitBackground属性的用途.

然后当然将样式应用于您的主题.

<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="searchViewStyle">@style/SearchViewMy</item>
</style>
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案,因为它不会对支持库的视图层次结构实现做出假设,这可能会在没有通知的情况下发生变化. (6认同)

小智 18

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

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

  • 如果“app:”不起作用,请尝试“android:”。这对我有用。 (4认同)

Ebr*_*owi 7

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

mSearchView.findViewById(androidx.appcompat.R.id.search_plate)
        .setBackgroundColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)


Pir*_*hah 7

如果您想从 SearchView 中删除下划线,只需将以下代码复制粘贴到您的 SearchView 中即可。有用

 android:queryBackground="@null"
Run Code Online (Sandbox Code Playgroud)

像这样,

      <SearchView
                android:id="@+id/searchView"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:queryBackground="@null"
                />
Run Code Online (Sandbox Code Playgroud)


ran*_*aha 6

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

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