【问题标题】:Remove Search View icon from hint text从提示文本中删除搜索视图图标
【发布时间】:2015-01-31 15:08:27
【问题描述】:

我正在使用带有工具栏的 appcompat 库,并且在我的应用中实现了搜索视图。但是我想在展开时删除搜索视图图标。

这是我的菜单 xml 文件:

<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_search"
    android:title="@string/action_search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="ifRoom|collapseActionView"/>

这就是我膨胀菜单的方式:

getMenuInflater().inflate(R.menu.main, menu);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
searchView.setQueryHint(getString(R.string.search_hint));
return super.onCreateOptionsMenu(menu);

这是我要删除的内容:

【问题讨论】:

标签: android android-actionbar android-appcompat searchview android-actionbar-compat


【解决方案1】:

这是一个老问题,但在我的情况下,这对我帮助很大:如果您试图隐藏在菜单中,这里发布的问题对我来说都不是完美的(AK5T 的问候几乎解决了我的问题)。解决问题的是: 而不是放

app:actionViewClass="android.widget.SearchView"

在菜单项内,您可以更改为:

app:actionLayout="@layout/search_layout"

而且,在这个布局中,你可以添加这段代码:

<?xml version="1.0" encoding="utf-8"?>
<android.widget.SearchView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:searchHintIcon="@drawable/nothing_drawed"/>

最后,在可绘制对象中创建它,里面什么都没有,例如:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

</selector>

只有这种方法对我有用。当我试图隐藏 searchHintIcon,设置为 @null 或其他任何东西时,它仍然和我没有编写任何代码一样。

【讨论】:

    【解决方案2】:

    对于androidxSearchView 的新版本: 如果您从代码中添加SearchView,它会有效。 在styles.xm中添加新样式

    <style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
        <item name="searchHintIcon">@null</item>
    </style>
    

    并将style 应用到您的应用theme

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

    或者如果你从 xml 添加SearchView,那么在你的布局中添加这一行:

    app:searchHintIcon="@null"
    

    【讨论】:

      【解决方案3】:

      如果您有自定义的搜索视图,只需将其添加到您的 .xml 布局中

      app:searchIcon="@null" 应用程序:iconifiedByDefault="false"

      【讨论】:

        【解决方案4】:
        <item android:id="@+id/menu_search"
                android:icon="@drawable/action_search"
                app:actionLayout="@layout/xx_layout"
                app:showAsAction="always"/>
        

        在 xx_layout 中:

        <?xml version="1.0" encoding="utf-8"?>
        <android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/search_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:searchHintIcon="@null"
            android:iconifiedByDefault="true" />
        

        【讨论】:

          【解决方案5】:

          最简单的方法是Here...,如果是AppCompat

          app:iconifiedByDefault="false"
          app:searchIcon="@null"
          

          或者在其他情况下

          android:iconifiedByDefault="false"
          android:searchIcon="@null"
          

          【讨论】:

            【解决方案6】:

            如果您查看 SearchView 布局的 android 源代码,您会看到搜索图标有一个 id search_mag_icon。所以在onCreateOptionsMenu中,

             @Override
             public boolean onCreateOptionsMenu(Menu menu) {
                MenuInflater inflater = getMenuInflater();
                inflater.inflate(R.menu.menu_search,menu);
                MenuItem searchViewItem = menu.findItem(R.id.search);
                SearchView searchView = (SearchView)searchViewItem.getActionView();        
                searchView.findViewById(R.id.search_mag_icon).setVisibility(View.GONE);
            }
            

            只需通过 id 找到视图并将其可见性设置为消失。

            【讨论】:

              【解决方案7】:

              试试这个:

              在您的应用主题中,添加以下行:

              <item name="searchViewStyle">@style/MySearchViewStyle</item>
              

              在下面添加定义样式:

              <style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
                  <item name="searchHintIcon">@null</item>
              </style>
              

              【讨论】:

              • 我更喜欢这个解决方案,而不是使用私有 ID 或反射。只要确保您使用的是支持版本的 SearchView (android.support.v7.widget.SearchView)
              • 有谁知道在哪里可以找到searchViewStyle 的官方文档?
              【解决方案8】:
              try {
                  Field mDrawable = SearchView.class.getDeclaredField("mSearchHintIcon");
                  mDrawable.setAccessible(true);
                  Drawable drawable = (Drawable) mDrawable.get(searchView);
                  drawable.setBounds(0, 0, 0, 0);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              

              setBounds 神奇

              【讨论】:

                【解决方案9】:

                这帮助我删除了搜索图标

                searchView.setIconified(false);
                

                如果您希望 searchView 始终展开,请使用以下命令:

                searchView.onActionViewExpanded();
                

                【讨论】:

                • 完美,在尝试了每一种解决方案之后,这个都有效!
                【解决方案10】:

                在您的 onCreateOptionsMenu 中

                int searchPlateId = searchView.getContext().getResources()
                            .getIdentifier("android:id/search_src_text", null, null);
                    EditText searchPlate = (EditText) searchView
                            .findViewById(searchPlateId);
                    searchPlate.setHint("");
                

                【讨论】:

                  【解决方案11】:

                  this question 中查看SumeetP 的答案。不确定这是否有效,因为我从未使用过它。他将搜索图标作为 ImageView。所以我想你可以将图像设置为android.R.color.transparent,这样它就不会可见了。

                  【讨论】:

                  • 这会隐藏操作栏上的图像,而不是在扩展的搜索视图 imo 中。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-04-09
                  • 2013-07-21
                  • 2018-07-01
                  • 2014-01-09
                  • 1970-01-01
                  相关资源
                  最近更新 更多