17

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

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

ActionBar 有两个动作

非常感谢你。

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

android:icon="@drawable/selectable_header_search"
4

6 回答 6

18

不幸的是,没有简单的方法可以将SearchView图标更改为自定义可绘制对象,因为主题属性searchViewSearchIcon不是公共的。有关详细信息,请参阅答案。

但是,我认为您的问题是由于继承了错误的主题引起的。请android:Theme.Holo.Light.DarkActionBar用作您的主题的基础。那么操作栏上的默认图标应该是浅色的。

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    ...
</style> 
于 2013-01-17T09:23:01.373 回答
10

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

int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null);
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId);
searchIcon.setImageResource(R.drawable........);
于 2013-12-10T10:58:26.063 回答
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);
于 2013-07-11T20:56:03.097 回答
0

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

于 2013-08-21T14:47:15.077 回答
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>

您现在可以使用 定义 SearchView 的样式searchViewStyleeditTextColor并将设置搜索框中文本的颜色。通过设置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
于 2016-10-18T02:41:41.460 回答
-2

对于像我这样希望找到真正更改图标的方法的人,您可以将其与 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,因为与之相关的字段已经被设置为私有。

于 2013-05-29T14:56:20.900 回答