如何更改SearchView默认图标?

我已经使用“ Android操作栏样式生成器 ”为了生成我自己的全息主题。 然后,我添加了两个图标到操作栏,一个用于一个searchFilter,一个用于一个文件select器, 两个图标都是白色的 。 文件select器图标(在右边)看起来不错,但不知何故search图标看起来是深灰色的。 在search文本视图中键入时,closuresbutton也显示为深灰色。

我试图改变操作栏的颜色,也从searchview,没有成功。 为什么search视图显示这种颜色? 我怎样才能改变它?

有两个动作的ActionBar

非常感谢你。

更新 :我以为我的应用程序使用我的图标,但它没有,它使用默认的search视图图标,所以我的问题其实是,我该如何更改search视图的默认图标? menu.xml文件中的这句话不起作用:

android:icon="@drawable/selectable_header_search" 

Related of "如何更改SearchView默认图标?"

不幸的是,没有简单的方法来将SearchView图标更改为自定义可绘制,因为主题属性searchViewSearchIcon不是公共的。 看到这个答案的细节。

不过,我认为你的问题是由错误的主题inheritance而来的。 请使用android:Theme.Holo.Light.DarkActionBar作为您的主题的基础。 然后操作栏上的默认图标应该有浅色。

 <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> ... </style> 

由于searchViewSearchIcon属性未公开,因此可以使用以下代码更改图标:

 int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null); ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId); searchIcon.setImageResource(R.drawable........); 

尝试在showAsAction中设置这个选项:* MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW *

如果没有这个选项,SearchView不会把你设置的动作图标按下。

 menu.add("Search") .setIcon( getResources().getDrawable( R.drawable.selectable_header_search)) .setActionView(searchView) .setShowAsAction( MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

我发现在操作栏中更改默认search视图图标的最简单方法是在onPrepareOptionsMenu中。 你可以在这里看到我的答案类似的问题!

在你的主题风格包括:

 <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">@drawable/ic_ab_small_search</item> <item name="defaultQueryHint">@string/toolbar_search_hint</item> <item name="closeIcon">@drawable/ic_ab_small_search_close</item> </style> 

这将根据您的喜好devise您的search视图,或多或less。 searchIcon字段是操作栏中的图标。 searchHintIcon字段是search字段中提示左侧的小图标。 closeIcon字段是search字段右侧的closures图标。

检查了这一点,更多的风格设置:

 $ANDROID_SDK/platforms/android-24/data/res/values/styles_holo.xml 

对于像我这样的人希望find一种方法来真正改变图标,你可以使用此操作栏sherlock:

  // Getting the 'search_icon' ImageView searchIcon = (ImageView)searchView.findViewById(R.id.abs__search_button); // Setting background of 'search_plate' to earlier defined drawable. searchIcon.setImageResource(R.drawable.search_button_selector); 

你不能用通用的方式android:icon来更改默认的,因为与它相关的字段已经被设置为private。