Android SearchView图标

我想禁用search视图组件内显示的Mag图标。 任何想法如何引用它,并将其删除或replace为另一个可绘制的?

在这里输入图像说明

Solutions Collecting From Web of "Android SearchView图标"

在你的主题中:

<style name="Theme" parent="Your parent theme"> <item name="android:searchViewSearchIcon">@android:drawable/ic_search</item> </style> 

编辑:
searchViewSearchIcon是一个私有属性。 这个答案因此不起作用(在原生ActionBar上)。

由于这个问题的措辞没有提到任何ActionBarSherlock (标签除外),并且已经添加了评论,说明接受的答案对标准和/或支持库操作栏不起作用,所以我发布了另一个答案。 这里是onCreate的Java代码:

 // obtain action bar ActionBar actionBar = getSupportActionBar(); // find SearchView (im my case it's in a custom layout because of left alignment) View v = actionBar.getCustomView(); SearchView searchView = (SearchView)v.findViewById(R.id.search_view); ImageView icon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); // method 1: does not work persistently, because the next line // should be probably called after every manipulation with SearchView // icon.setVisibility(View.GONE); // method 2: working code icon.setAdjustViewBounds(true); icon.setMaxWidth(0); icon.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); icon.setImageDrawable(null); 

根据这篇文章 ,当使用支持库( android-support-v7-appcompat在我的情况下)与setIconifiedByDefault(false)setIconifiedByDefault(false) ,图标显示在编辑文本框( SearchAutoComplete )之外。 否则( setIconifiedByDefault(true) )它会显示在框内。 提供的代码默认情况下用于禁用“图标化”,可能需要进行一些更改才能使用“图标化”search视图。 我不知道是否同样适用于ActionBarSherlock

希望这可以帮助。

这个图标是提示。 所以你可以简单地设置新的提示文本。

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

如果您希望图标作为提示文本,请使用ImageSpan的可伸缩string

 int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); EditText searchPlate = (EditText) searchView.findViewById(searchPlateId); searchPlate.setTextColor(getResources().getColor(R.color.search_text_color)); SpannableString string = new SpannableString(" "); Drawable d = getResources().getDrawable(R.drawable.ic_search); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM); string.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); searchPlate.setHint(string); 

您必须像这样自定义SearchView风格:

 <style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"> <!-- Search button icon --> <item name="searchIcon">@drawable/ic_arrow_back</item> </style> 

然后将其添加到您的AppTheme

 <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- your other colors and styles --> <item name="searchViewStyle">@style/MySearchViewStyle</item> </style> 

并使用标签style将其应用于您的search视图:

 <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/searchView" android:layout_height="wrap_content" android:layout_width="match_parent" app:queryHint="@string/search_hint" android:focusable="true" android:focusableInTouchMode="true" style="@style/MySearchViewStyle" app:iconifiedByDefault="false" /> 

希望能帮助到你!

你必须在你的MenuItem中join这一行android:iconifiedByDefault="@android:color/transparent"

 <item android:id="@+id/activity_home_action_search" android:icon="@drawable/ic_action_search" android:title="@string/activity_home_search_title" android:iconifiedByDefault="@android:color/transparent" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always|collapseActionView" /> 

或者你可以编程方式searchView.setIconifiedByDefault(true);

 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); getMenuInflater().inflate(R.menu.home, menu); MenuItem searchMenuItem = menu.findItem(R.id.activity_home_action_search); SearchView searchView = (SearchView) searchMenuItem.getActionView(); searchView.setIconifiedByDefault(true); } 

如果您正在使用v7应用程序compat库,则可以在主题中轻松更改此设置。 在从AppCompat主题扩展的主题中,只需添加一行:

 <item name="searchViewSearchIcon">@drawable/ic_search</item> 

要删除提示searchbutton:

 mNearMeSearchBar = (SearchView) mView.findViewById(R.id.nearme_search_component_nearme_edittext); mNearMeSearchBar.setIconifiedByDefault(false); //Removes Search Hint Icon 

要更改可绘制的searchbutton:

 int searchImgId = getResources().getIdentifier("android:id/search_mag_icon", null, null); ImageView v = (ImageView) mNearMeSearchBar.findViewById(searchImgId); v.setImageResource(R.drawable.ic_compass); 

这些线删除了放大镜:

  //remove search icon mSearchView.setIconifiedByDefault(false); ImageView icon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); icon.setVisibility(View.GONE); 

在你的主题风格包括:

 <style name="YourTheme.Toolbar"> <item name="searchViewStyle">@style/YourActionBarSearch</item> <item name="editTextColor">@color/your_ab_text_color</item> <item name="android:textColorHint">@color/your_ab_hint_color</item> </style> 

您现在可以使用searchViewStyle定义SearchView的样式, editTextColor将在search框中设置文本的颜色。 通过设置android:textColorHint你也将设置提示的颜色,例如“search…”。

 <style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView"> <item name="searchIcon">@drawable/ic_ab_search</item> <item name="queryBackground">@null</item> <item name="submitBackground">@null</item> <item name="searchHintIcon">@null</item> <item name="defaultQueryHint">@null</item> <item name="closeIcon">@drawable/ic_ab_small_search_close</item> </style> 

这将根据您的喜好devise您的search视图,或多或less。 searchIcon字段是操作栏中的图标。 searchHintIcon字段是search字段中提示左边的小图标 ,在您的问题中您要求提供这个图标 ; 将其设置为@null删除图标。 closeIcon字段是search字段右侧的closures图标。

在searchView组件的xml中添加next:

 app:searchHintIcon="@null"