【问题标题】:How to remove white underline in a SearchView widget in Toolbar Android如何在工具栏 Android 的 SearchView 小部件中删除白色下划线
【发布时间】:2015-08-30 19:35:05
【问题描述】:

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

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

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

    }

第二个解决方案:

 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 可能重复

【问题讨论】:

  • 尝试在xml文件中设置这两个属性 android:submitBackground="@android:color/transparent" android:queryBackground="@android:color/transparent"
  • 细线会自动为您呈现吗?我正在努力添加一行!

标签: android searchview android-toolbar android-search


【解决方案1】:

如果您使用的是 SearchView,请使用低于 21 的 API

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

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

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

【讨论】:

  • 仅供参考,此属性从 Api 级别 21 开始可用。
  • 试试 app:queryBackground="@android:color/transparent" =)
  • app:queryBackground="@android:color/transparent" 在 Api Level 21 而不是 android:queryBackground="@android:color/transparent" 上正常工作
  • 它在 API 29 上对我不起作用 :( 我仍然看到下划线。
  • TBH,做出决定的是NOT API LEVEL,它是您使用的VIEW类型。例如,我在 API 28 中使用 SearchView (不是 androidx.appcompat.widget.SearchView ),那么我应该使用 android: 前缀。
【解决方案2】:

一次尝试如下

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

希望对你有帮助。

【讨论】:

  • 谢谢!正是我想要的。
  • 当 searchView 有语音按钮时你会怎么做?我尝试对search_voice_btn id 使用相同的技巧,但它不起作用
  • 非常感谢。在我的情况下,我将 Background drawable 设置为 null 即 searchView.findViewById(android.support.v7.appcompat.R.id.search_plate)setBackground(null)
  • 帮不了我。下划线是无论如何都要留下来
  • 以下答案应该是公认的答案,而不是这个。
【解决方案3】:

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

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

【讨论】:

  • 如果 'app:' 不起作用,请尝试 'android:'。它对我有用。
【解决方案4】:

或者你可以通过样式来做到这一点:

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

【讨论】:

  • 这是最好的答案,因为它没有对支持库的视图层次实现做出假设,这可能会在没有通知的情况下发生变化。
  • 确实是最佳答案!在尝试任何其他解决方案之前先选择这个。
【解决方案5】:

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

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

【讨论】:

  • 很棒的解决方案谢谢:)
【解决方案6】:

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

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

【讨论】:

  • 而不是ContextCompat.getColor...,只需使用Color.TRANSPARENT
【解决方案7】:

下面的代码对我有用。

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

【讨论】:

    【解决方案8】:

    对于 androidxkotlin

            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)
    

    【讨论】:

      【解决方案9】:

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

      【讨论】:

      • 实际上,这是唯一对我有用的答案。 here 提供了有关此工作原理的扩展说明
      【解决方案10】:

      首先你应该像这样得到底线:

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

      然后你应该像这样将背景颜色设置为透明:

      searchPlate.setBackgroundColor(Color.TRANSPARENT);
      

      这非常适用于 androidx.appcompat.widget.SearchView!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-07
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 2017-05-18
        • 2015-02-07
        • 1970-01-01
        • 2018-12-01
        相关资源
        最近更新 更多