1

如何更改 Android 搜索视图图标颜色?默认颜色为白色,是否可以更改图标颜色。

我努力了:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_theme_blue_menu"
        android:showAsAction="always"
        android:title="@string/search_actionbar"/>
    <item
        android:id="@+id/slider_menu"
        android:icon="@drawable/ic_slider_menu"
        android:orderInCategory="100"
        android:showAsAction="always"/>

</menu>

但我需要在代码中更改它,而不是在布局文件中。可能吗?

4

3 回答 3

2

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

android:Theme.Holo.Light.DarkActionBar用作您的主题的基础。那么操作栏上的默认图标应该是浅色的。

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    ...
</style> 
于 2013-11-27T05:45:58.550 回答
2

我所做的是,我创建了一种方法来更改任何可绘制颜色

 public Drawable changeDrawableTint(Drawable drawable, int color){
    final Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTintList(wrappedDrawable, ColorStateList
            .valueOf(color));
    return wrappedDrawable;
}

,即使在棒棒糖前的android版本中,我也会得到搜索视图菜单项,并使用所需颜色调用该方法

  @Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    /**
     * We inflate the correct activity menu
     */
    getMenuInflater().inflate(R.menu.menu_partner_list, menu);

    searchViewMenuItem = menu.findItem(R.id.action_search);
    if(searchViewMenuItem!=null && searchViewMenuItem.getIcon()!=null){
        searchViewMenuItem.setIcon(Utils.getInstance()
                .changeDrawableTint(searchViewMenuItem.getIcon(),
                        Color.WHITE));
    }
    setUpSearchView(menu);
    shouldHideMenuActions();
    return true;
}

这是菜单

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always|collapseActionView"
        android:icon="@drawable/ic_search"
        android:title="@string/search" />

</menu>
于 2016-10-06T05:50:05.740 回答
-2

您可以在您的 java 类中使用以下代码:

mView.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.LIGHTEN);

上面的这一行将视图的颜色更改为您在 Color.parseColor() 中建议的颜色,以及您使用 PorterDuff.Mode 定义它的方式。点击一个按钮调用上面的代码来检查颜色变化是否生效。

于 2013-11-27T06:00:10.970 回答