如何更改 SearchView 默认图标?
Posted
技术标签:
【中文标题】如何更改 SearchView 默认图标?【英文标题】:How to change SearchView default icon? 【发布时间】:2012-12-31 09:13:47 【问题描述】:我使用“android Action Bar Style Generator”来生成我自己的 Holo 主题。 然后我在操作栏中添加了两个图标,一个用于搜索过滤器,一个用于文件选择器,两个图标都是白色的。文件选择器图标(右侧)看起来不错,但不知何故,搜索图标看起来是深灰色的。在搜索文本视图上键入时,关闭按钮也显示为深灰色。
我尝试更改操作栏和搜索视图的颜色,但没有成功。为什么搜索视图显示这种颜色?怎么改?
非常感谢。
更新:我认为我的应用程序正在使用我的图标,但它没有,它使用默认的搜索视图图标,所以我的问题实际上是,如何更改默认图标搜索视图? menu.xml 文件中的这句话不起作用:
android:icon="@drawable/selectable_header_search"
【问题讨论】:
【参考方案1】:不幸的是,没有简单的方法可以将SearchView
图标更改为自定义可绘制对象,因为主题属性searchViewSearchIcon
不公开。详情见this答案。
但是,我认为您的问题是由于从错误的主题继承引起的。请使用android:Theme.Holo.Light.DarkActionBar
作为您主题的基础。那么操作栏上的默认图标应该是浅色的。
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
...
</style>
【讨论】:
【参考方案2】:由于 searchViewSearchIcon 属性不公开,您可以使用以下代码更改图标:
int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null);
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId);
searchIcon.setImageResource(R.drawable........);
【讨论】:
这会抛出一个 nullPointerExceptionImageView searchIconView = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_button); searchIconView.setImageResource(R.drawable.ic_nav_search);
将适用于 android 4+【参考方案3】:
尝试在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);
【讨论】:
这为我解决了它(自定义图标不起作用),Android 4.1 到 5.0。等效于菜单 XML:app:showAsAction="always|collapseActionView"
【参考方案4】:
我发现更改操作栏中默认搜索视图图标的最简单方法是在您的 onPrepareOptionsMenu 中。你可以看到我对类似问题的回答here!
【讨论】:
【参考方案5】:在您的主题风格中包含以下内容:
<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
将设置搜索框中文本的颜色。通过设置android:textColorHint
,您还将设置提示的颜色,例如“搜索……”。
<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>
这将或多或少地为您的搜索视图设置样式。字段searchIcon
是操作栏中的图标。 searchHintIcon
字段是搜索字段中提示左侧的小图标。 closeIcon
字段是搜索字段右侧的关闭图标。
查看这里,了解更多样式设置:
$ANDROID_SDK/platforms/android-24/data/res/values/styles_holo.xml
【讨论】:
【参考方案6】:对于像我这样希望找到真正更改图标的方法的人,您可以将其与 actionbar 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
更改默认的,因为与之相关的字段已经被设置为私有。
【讨论】:
以上是关于如何更改 SearchView 默认图标?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改SearchView上的默认图标,以便在Android的操作栏中使用?
为 Android TV 应用程序更改 BrowseFragment 的 SearchView 默认图标?