从SearchView小部件中删除默认搜索图标

5
我该如何移除SearchView小部件中出现的默认搜索图标(不在ActionBar中)?通过样式可以更改图标,但我找不到删除它的方法。 在此输入图片描述
7个回答

10

它已经起作用了......

ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);

ViewGroup linearLayoutSearchView =(ViewGroup) searchViewIcon.getParent();
linearLayoutSearchView.removeView(searchViewIcon);

最佳答案 - Smit Davda
1
对于androidx用户,请使用以下代码:ImageView searchViewIcon = (ImageView)searchView.findViewById(androidx.appcompat.R.id.search_mag_icon); searchViewIcon.setVisibility(View.GONE); - digiwizkid

5
对我来说,只有这个起作用:
ImageView magImage = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
magImage.setVisibility(View.GONE);
magImage.setImageDrawable(null);

@sector11几乎做到了,但是你还需要添加一行magImage.setImageDrawable(null),因为在Github上查看SearchView.java,特别是方法updateViewsVisibility中,可以看到它不断更新其可见性。

从GitHub提取

if (mCollapsedIcon.getDrawable() == null || mIconifiedByDefault) {
    iconVisibility = GONE;
} else {
    iconVisibility = VISIBLE;
}
mCollapsedIcon.setVisibility(iconVisibility);

4
对于AndroidX SearchView,只需使用app:searchIcon="@null"

2
仅适用于普通视图,一旦单击搜索栏,图标仍然存在。 - Erdnuss

3

目前,您应该使用

ImageView magImage = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
magImage.setVisibility(View.GONE);

3
试试这个:
<style name="SearchViewStyle"  parent="Widget.AppCompat.SearchView" >
    <item name="searchHintIcon">@null</item>
     <!-- Background for the search query section (e.g. EditText) -->
    <item name="queryBackground">@color/transparent</item>
</style>

永远不要使用直接的安卓 ID 来查找视图,因为如果 ID 改变,你的代码将无法工作。始终使用标准方式来解决问题,而非绕过方法。 有关更多信息,请参阅此链接


2

您可以覆盖它:

    int searchImgId = context.getResources().getIdentifier("android:id/search_mag_icon", null, null);
ImageView searchImage = (ImageView) searchView.findViewById(searchImgId);


searchImage.setVisibility(View.GONE); 

如果您的搜索视图在布局中,请使用带有关闭按钮的EditText:https://github.com/yanchenko/droidparts/blob/develop/droidparts/src/org/droidparts/widget/ClearableEditText.java。如果您想要创建自己的搜索视图,则请使用帧布局并添加文本更改监听器以管理关闭或取消按钮的可见性。关于UI中的搜索视图,有一些讨论:如何创建带有叉(x)按钮的EditText?如何将按钮放置在EditText内部。如果您想显示搜索列表,则请使用AutoCompleteTextView而不是EditText。您可以从以下链接阅读教程:
  1. http://www.tutorialspoint.com/android/android_auto_complete.htm
  2. http://examples.javacodegeeks.com/android/core/widget/autocompletetextview/android-auto-complete-example/
  3. http://androidexample.com/Show_AutoComplete_Suggestions_-_Android_Example/index.php?view=article_discription&aid=105&aaid=127
希望这对您有所帮助。

1
searchImage.setLayoutParams上出现了NullPointerException。我将其放置在activity的onCreate()方法中。 - Android Developer
我的SearchView小部件被图标化了..当我点击图标时它会展开..我没有使用setIconifiedByDefault(false) - Android Developer
你想要移除搜索图标吗? - Yogendra
是的,我想从可展开搜索视图中删除搜索图标。 - Android Developer
我的searchView在xml布局中,而不是菜单布局中。 - Android Developer
显示剩余7条评论

2
请在您的代码中设置此SearchView android:paddingLeft="-16dp" // 此行是为了去除图标空间 android:paddingStart="-16dp" // 此行是为了去除图标空间 android:searchIcon="@null" // 此行是为了去除搜索图标 android:closeIcon="@null" // 此行是为了去除关闭图标
 <SearchView
                        android:queryBackground="@android:color/transparent"
                        android:id="@+id/search"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:paddingLeft="-16dp"
                        android:paddingStart="-16dp"
                        android:layout_gravity="center"
                        android:gravity="center"
                        android:background="@null"
                        android:searchIcon="@null"
                        android:closeIcon="@null"
                        android:theme="@style/BaseTheme"
                        android:iconifiedByDefault="false"
                        android:queryHint="@string/hint">

                        <requestFocus />

                    </SearchView>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接