如何更改SearchView默认图标?

时间:2013-01-16 22:08:52

标签: android android-actionbar customization searchview

我使用“Android Action Bar Style Generator”来生成我自己的Holo主题。 然后我在操作栏中添加了两个图标,一个用于searchFilter,另一个用于文件选择器,两个图标都是白色。文件选择器图标(在右侧)看起来不错,但不知何故搜索图标看起来是深灰色。在搜索文本视图中键入时,关闭按钮也显示为深灰色。

我尝试过更改操作栏的颜色以及搜索视图,但没有成功。为什么搜索视图显示此颜色?我怎样才能改变它?

ActionBar with two actions

非常感谢。

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

android:icon="@drawable/selectable_header_search"

6 个答案:

答案 0 :(得分:18)

很遗憾,没有简单的方法可以将SearchView图标更改为自定义drawable,因为主题属性searchViewSearchIcon不公开。有关详细信息,请参阅this答案。

但是,我认为你的问题是由错误的主题继承引起的。请使用android:Theme.Holo.Light.DarkActionBar作为主题的基础。然后,操作栏上的默认图标应为浅色。

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:6)

尝试在 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);

答案 3 :(得分:0)

我发现更改操作栏中默认搜索结果图标的最简单方法是在onPrepareOptionsMenu中。您可以在类似的问题中看到我的回答here

答案 4 :(得分:0)

在您的主题样式中包括:

<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

答案 5 :(得分:-2)

对于像我这样的人希望找到真正改变图标的​​方法,你可以在动作栏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更改默认方式,因为与其相关的字段已设置为私有。